DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_getProblems`( vIsTodayRelative tinyint(1) ) BEGIN /** * Calcula los problemas para un conjunto de tickets. * Agrupados por ticket * * @table tmp.sale_getProblems(ticketFk, clientFk, warehouseFk, shipped) Identificadores de los tickets a calcular * @return tmp.ticket_problems */ CALL sale_getProblems(vIsTodayRelative); CREATE OR REPLACE TEMPORARY TABLE tmp.ticket_problems (PRIMARY KEY (ticketFk)) ENGINE = MEMORY SELECT ticketFk, MAX(isFreezed) isFreezed, MAX(risk) risk, MAX(hasRisk) hasRisk, MAX(hasHighRisk) hasHighRisk, MAX(hasTicketRequest) hasTicketRequest, MAX(itemShortage) itemShortage, MIN(isTaxDataChecked) isTaxDataChecked, MAX(hasComponentLack) hasComponentLack, MAX(isTooLittle) isTooLittle, MAX(itemDelay) itemDelay, MAX(hasRounding) hasRounding, MAX(itemLost) itemLost, MAX(isVip) isVip, 0 totalProblems FROM tmp.sale_problems GROUP BY ticketFk; UPDATE tmp.ticket_problems SET totalProblems = ( (isFreezed) + (hasHighRisk) + (hasTicketRequest) + (!isTaxDataChecked) + (hasComponentLack) + (itemDelay IS NOT NULL) + (isTooLittle) + (itemLost IS NOT NULL) + (hasRounding IS NOT NULL) + (itemShortage IS NOT NULL) + (isVip) ); DROP TEMPORARY TABLE tmp.sale_problems; END$$ DELIMITER ;