49 lines
1.5 KiB
MySQL
49 lines
1.5 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_getAtp`(vDated DATE)
|
||
|
BEGIN
|
||
|
/**
|
||
|
* Calcula el valor mínimo acumulado para cada artículo ordenado por fecha y
|
||
|
* almacén.
|
||
|
*
|
||
|
* @param vDated Si no hay movimientos en la fecha indicada, debe devolver 0
|
||
|
* @table tmp.itemCalc(itemFk, wareHouseFk, dated, quantity)
|
||
|
* @return tmp.itemAtp(itemFk, warehouseFk, quantity)
|
||
|
*/
|
||
|
CREATE OR REPLACE TEMPORARY TABLE tItemOrdered
|
||
|
(UNIQUE(itemFk, warehouseFk, dated))
|
||
|
ENGINE = MEMORY
|
||
|
SELECT itemFk, warehouseFk, dated, SUM(quantity) quantity
|
||
|
FROM (
|
||
|
SELECT itemFk, warehouseFk, dated, quantity
|
||
|
FROM tmp.itemCalc
|
||
|
UNION ALL
|
||
|
SELECT itemFk, warehouseFk, vDated, 0
|
||
|
FROM (SELECT DISTINCT itemFk, warehouseFk FROM tmp.itemCalc) t2
|
||
|
) t1
|
||
|
GROUP BY itemFk, warehouseFk, dated
|
||
|
ORDER BY itemFk, warehouseFk, dated;
|
||
|
|
||
|
SET @lastItemFk := 0;
|
||
|
SET @lastWareHouseFk := 0;
|
||
|
SET @lastQuantity := 0;
|
||
|
|
||
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemAtp
|
||
|
(INDEX (itemFk, wareHouseFk))
|
||
|
SELECT itemFk, wareHouseFk, MIN(quantityAccumulated) quantity
|
||
|
FROM (
|
||
|
SELECT
|
||
|
itemFk,
|
||
|
IF(itemFk <> @lastItemFk OR wareHouseFk <> @lastWareHouseFk,
|
||
|
@lastQuantity := quantity,
|
||
|
@lastQuantity := @lastQuantity + quantity) quantityAccumulated,
|
||
|
wareHouseFk,
|
||
|
@lastItemFk := itemFk,
|
||
|
@lastWareHouseFk := wareHouseFk
|
||
|
FROM tItemOrdered
|
||
|
)sub
|
||
|
GROUP BY itemFk, wareHouseFk;
|
||
|
|
||
|
DROP TEMPORARY TABLE tItemOrdered;
|
||
|
END$$
|
||
|
DELIMITER ;
|