88 lines
2.3 KiB
MySQL
88 lines
2.3 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`clientNewBorn_recalc`()
|
||
|
BLOCK1: BEGIN
|
||
|
|
||
|
DECLARE vClientFk INT;
|
||
|
DECLARE vShipped DATE;
|
||
|
DECLARE vPreviousShipped DATE;
|
||
|
DECLARE vDone boolean;
|
||
|
DECLARE cur cursor for
|
||
|
|
||
|
SELECT clientFk, firstShipped
|
||
|
FROM bs.clientNewBorn;
|
||
|
|
||
|
DECLARE continue HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||
|
SET vDone := FALSE;
|
||
|
|
||
|
DELETE FROM bs.clientNewBorn WHERE isModified = FALSE;
|
||
|
|
||
|
INSERT INTO clientNewBorn(clientFk, firstShipped, lastShipped)
|
||
|
SELECT c.id, MAX(t.shipped), MAX(t.shipped)
|
||
|
FROM vn.client c
|
||
|
JOIN vn.ticket t on t.clientFk = c.id
|
||
|
LEFT JOIN clientNewBorn cb on cb.clientFk = c.id
|
||
|
WHERE t.shipped BETWEEN TIMESTAMPADD(YEAR, -1, util.VN_CURDATE()) AND util.VN_CURDATE() AND cb.isModified is null
|
||
|
GROUP BY c.id;
|
||
|
OPEN cur;
|
||
|
|
||
|
LOOP1: LOOP
|
||
|
SET vDone := FALSE;
|
||
|
FETCH cur INTO vClientFk, vShipped;
|
||
|
|
||
|
IF vDone THEN
|
||
|
CLOSE cur;
|
||
|
LEAVE LOOP1;
|
||
|
END IF;
|
||
|
|
||
|
BLOCK2: BEGIN
|
||
|
DECLARE vCurrentShipped DATE;
|
||
|
DECLARE vDone2 boolean;
|
||
|
DECLARE cur2 CURSOR FOR
|
||
|
SELECT shipped
|
||
|
FROM vn.ticket
|
||
|
WHERE clientFk = vClientFk AND shipped <= util.VN_CURDATE()
|
||
|
ORDER BY shipped DESC;
|
||
|
|
||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone2 = TRUE;
|
||
|
SET vDone2 := FALSE;
|
||
|
OPEN cur2;
|
||
|
|
||
|
SET vPreviousShipped := vShipped;
|
||
|
LOOP2: LOOP
|
||
|
SET vDone2 := FALSE;
|
||
|
FETCH cur2 INTO vCurrentShipped;
|
||
|
|
||
|
IF DATEDIFF(vPreviousShipped,vCurrentShipped) > 365 THEN
|
||
|
UPDATE bs.clientNewBorn
|
||
|
SET firstShipped = vPreviousShipped
|
||
|
WHERE clientFk= vClientFk;
|
||
|
|
||
|
CLOSE cur2;
|
||
|
LEAVE LOOP2;
|
||
|
END IF;
|
||
|
|
||
|
SET vPreviousShipped := vCurrentShipped;
|
||
|
|
||
|
IF vDone2 THEN
|
||
|
UPDATE bs.clientNewBorn
|
||
|
SET firstShipped = vCurrentShipped
|
||
|
WHERE clientFk= vClientFk;
|
||
|
CLOSE cur2;
|
||
|
LEAVE LOOP2;
|
||
|
END IF;
|
||
|
|
||
|
END LOOP LOOP2;
|
||
|
END BLOCK2;
|
||
|
END LOOP LOOP1;
|
||
|
|
||
|
UPDATE bs.clientNewBorn cnb
|
||
|
LEFT JOIN (SELECT DISTINCT t.clientFk
|
||
|
FROM vn.ticket t
|
||
|
JOIN vn.productionConfig pc
|
||
|
WHERE t.shipped BETWEEN util.VN_CURDATE() + INTERVAL -(`notBuyingMonths`) MONTH
|
||
|
AND util.VN_CURDATE() + INTERVAL -(`pc`.`rookieDays`) DAY) notRookie ON notRookie.clientFk = cnb.clientFk
|
||
|
SET cnb.isRookie = ISNULL(notRookie.clientFk);
|
||
|
|
||
|
END BLOCK1$$
|
||
|
DELIMITER ;
|