假设我有下表:
production(rec_ID, item_ID, date, qty)
usage(rec_ID, item_ID, date, qty)
inventory(item_ID, stock)
使用以下示例数据:
Production
Rec_ID | item_ID | date | qty
1 | A | 2016-01-18 | 50
2 | A | 2016-01-19 | 50
3 | A | 2016-01-20 | 50
Usage
Rec_ID | item_ID | date | qty
100 | A | 2016-01-20 | 70
Inventory
item_ID| stock
A | 80
正如您所看到的,生产中的任何内容都会增加库存,而使用中的任何内容都会减少库存。现在我有80件库存A.我想在表生产中搜索哪一行剩余库存。规则是:早期生产将首先用完。
使用ID 100将首先从生产ID 1中获取(70-50)。剩余的20个将从生产ID 2中获取。因此,剩余库存为:80(来自生产ID 2的30和来自生产ID 3的50)。如何根据库存库存获取生产表中受影响的行?我想的是:
SELECT * FROM production ORDER BY date DESC
循环遍历该项目,直到达到当前库存水平为止。例如:
current_Stock = SELECT stock FROM Inventory WHERE item_ID='A'
production_List = SELECT * FROM production WHERE item_ID='A' ORDER BY date DESC
for each production in production_List
qty_total += production.qty
(add each production to arraylist or something)
if qty_total >= current_Stock
exit for
end if
next
(process affected rows...)
在纯SQL中有更优雅的方法吗?
答案 0 :(得分:0)
此查询可能是一个解决方案
SELECT NULL AS Rec_ID,
qty,
NULL AS total,
`date`
FROM cc
WHERE (@total := 0)
UNION
SELECT Rec_ID, qty, @total := @total + qty AS total, `date`
FROM
(SELECT *
FROM Production
ORDER BY `date` DESC
WHERE item_ID='A') tmp
WHERE @total <
(SELECT stock
FROM Inventory
WHERE item_ID='A') ;