DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`salesPersonEvolution_add`() BEGIN /** * Calcula los datos para los gráficos de evolución agrupado por salesPersonFk y día. * Recalcula automáticamente los 3 últimos meses para comprobar si hay algún cambio. */ DECLARE vDated DATE; DECLARE vCont INT DEFAULT 1; SELECT MAX(dated) - INTERVAL 3 MONTH INTO vDated FROM salesPersonEvolution; DELETE FROM salesPersonEvolution WHERE dated >= vDated; IF ISNULL(vDated) THEN SELECT MIN(dated) INTO vDated FROM salesByclientSalesPerson; INSERT INTO salesPersonEvolution( salesPersonFk, dated, amount, equalizationTax, amountNewBorn ) SELECT salesPersonFk, dated, amount, equalizationTax, amountNewBorn FROM salesByclientSalesPerson WHERE dated = vDated GROUP BY salesPersonFk; SET vDated = vDated + INTERVAL 1 DAY; END IF; WHILE vDated < util.VN_CURDATE() DO SET vCont = vCont + 1; REPLACE salesPersonEvolution(salesPersonFk, dated, amount) SELECT salesPersonFk, vDated, amount FROM(SELECT salesPersonFk, SUM(amount) amount FROM(SELECT salesPersonFk, amount FROM salesPersonEvolution WHERE dated = vDated - INTERVAL 1 DAY UNION ALL SELECT salesPersonFk, amount FROM salesByclientSalesPerson WHERE dated = vDated UNION ALL SELECT salesPersonFk, - amount FROM salesByclientSalesPerson WHERE dated = vDated - INTERVAL 1 YEAR )sub GROUP BY salesPersonFk )sub GROUP BY salesPersonFk; SET vDated = vDated + INTERVAL 1 DAY; END WHILE; END$$ DELIMITER ;