salix/db/routines/bs/procedures/compradores_evolution_add.sql

67 lines
1.5 KiB
MySQL
Raw Normal View History

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 ;