DROP PROCEDURE IF EXISTS `bs`.`manaCustomerUpdate`; DELIMITER $$ $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `bs`.`manaCustomerUpdate`() BEGIN DECLARE vToDated DATE; DECLARE vFromDated DATE; DECLARE vForDeleteDated DATE; DECLARE vManaId INT; DECLARE vManaAutoId INT; DECLARE vClaimManaId INT; DECLARE vManaBankId INT; DECLARE vManaGreugeTypeId INT; SELECT id INTO vManaId FROM `component` WHERE code = 'mana'; SELECT id INTO vManaAutoId FROM `component` WHERE code = 'autoMana'; SELECT id INTO vClaimManaId FROM `component` WHERE code = 'manaClaim'; SELECT id INTO vManaBankId FROM `bank` WHERE code = 'mana'; SELECT id INTO vManaGreugeTypeId FROM `greugeType` WHERE code = 'mana'; SELECT IFNULL(max(dated), '2016-01-01') INTO vFromDated FROM bs.manaCustomer; DELETE FROM bs.manaCustomer WHERE dated = vFromDated; SELECT IFNULL(max(dated), '2016-01-01') INTO vFromDated FROM bs.manaCustomer; WHILE timestampadd(DAY,30,vFromDated) < CURDATE() DO SELECT timestampadd(DAY,30,vFromDated), timestampadd(DAY,-90,vFromDated) INTO vToDated, vForDeleteDated; DELETE FROM bs.manaCustomer WHERE dated <= vForDeleteDated; INSERT INTO bs.manaCustomer(Id_Cliente, Mana, dated) SELECT Id_Cliente, cast(sum(mana) as decimal(10,2)) as mana, vToDated as dated FROM ( SELECT cs.Id_Cliente, Cantidad * Valor as mana FROM vn2008.Tickets t JOIN vn2008.Consignatarios cs using(Id_Consigna) JOIN vn2008.Movimientos m on m.Id_Ticket = t.Id_Ticket JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = m.Id_Movimiento WHERE Id_Componente IN (vManaAutoId, vManaId, vClaimManaId) AND t.Fecha > vFromDated AND date(t.Fecha) <= vToDated UNION ALL SELECT r.Id_Cliente, - Entregado FROM vn2008.Recibos r WHERE Id_Banco = vManaBankId AND Fechacobro > vFromDated AND Fechacobro <= vToDated UNION ALL SELECT g.Id_Cliente, g.Importe FROM vn2008.Greuges g WHERE Greuges_type_id = vManaGreugeTypeId AND Fecha > vFromDated AND Fecha <= vToDated UNION ALL SELECT Id_Cliente, mana FROM bs.manaCustomer WHERE dated = vFromDated ) sub GROUP BY Id_Cliente HAVING Id_Cliente; SET vFromDated = vToDated; END WHILE; END$$ DELIMITER ;