DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`compradores_evolution_add`() BEGIN /** * Inserta en la tabla compradores_evolution las ventas acumuladas en los ultimos 365 dias * */ DECLARE vDated DATE; DECLARE vCount INT DEFAULT 1; SELECT MAX(fecha) + INTERVAL 1 DAY INTO vDated FROM compradores_evolution; IF vDated IS NULL THEN SELECT MIN(dated) INTO vDated FROM sale; INSERT INTO compradores_evolution( Id_Trabajador, fecha, importe) SELECT it.workerFk, vDated, SUM(s.amount) FROM sale s JOIN vn.itemType it ON it.id = s.typeFk WHERE s.dated = vDated GROUP BY it.workerFk; SET vDated = vDated + INTERVAL 1 DAY; END IF; WHILE vDated < util.VN_CURDATE() DO SET vCount = vCount + 1; REPLACE compradores_evolution( Id_Trabajador, fecha, importe) SELECT Id_Trabajador, vDated, SUM(importe) FROM( SELECT Id_Trabajador, importe FROM compradores_evolution JOIN ( SELECT DISTINCT it.workerFk FROM vn.itemType it )sub2 ON sub2.workerFk = Id_Trabajador WHERE fecha = vDated - INTERVAL 1 DAY UNION ALL SELECT it.workerFk, s.amount * IF(s.dated < vDated, -1, 1) FROM sale s JOIN vn.itemType it ON it.id = s.typeFk JOIN vn.itemCategory ic ON ic.id = it.categoryFk WHERE s.dated IN (vDated, vDated - INTERVAL 1 YEAR) AND ic.merchandise )sub GROUP BY Id_Trabajador; SET vDated = vDated + INTERVAL 1 DAY; END WHILE; END$$ DELIMITER ;