DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`comercial_caducado`() BEGIN -- Este procedimiento le pasa los clientes al jefe de ventas cuando llevan dos meses inactivos IF day(util.VN_CURDATE()) = 5 then -- solo se ejecuta los dias 5 de cada mes Update Clientes join ( Select c.Id_Cliente from Clientes c join jerarquia j on j.worker_id = c.Id_Trabajador -- este filtro es para que solo toque los de los comerciales join ( select Id_Cliente, sum(Importe) as Saldo from ( select Id_Cliente, Importe from Facturas union all select Id_Cliente, - Entregado from Recibos ) sub group by Id_Cliente ) sindeuda on sindeuda.Id_Cliente = c.Id_Cliente left join ( select distinct Id_Cliente from Facturas where Fecha BETWEEN util.VN_CURDATE() - INTERVAL 12 MONTH AND util.VN_CURDATE() ) f on f.Id_Cliente = c.Id_Cliente left join ( select distinct Id_Cliente from Tickets where Fecha between util.VN_CURDATE() - INTERVAL 2 DAY AND util.VN_CURDATE() + INTERVAL 200 DAY ) tic_vivos on tic_vivos.Id_Cliente = c.Id_Cliente where c.Created < util.VN_CURDATE() - INTERVAL 2 MONTH -- este filtro respeta a los recien nacidos.... and j.boss_id = 87 -- sólo afecta a los comerciales de Alfredo and f.Id_Cliente is null -- comprueba que no tenga facturas en los dos ultimos meses and sindeuda.Saldo < 10 -- sólo cambia a los clientes con deuda escasa o nula and tic_vivos.Id_Cliente is null -- si tiene tickets vivos, lo respeta ) sub using(Id_Cliente) set Id_Trabajador = 87 ;-- Alfredo Giner; end if; END$$ DELIMITER ;