我有下面的表格,用户会给我一个产品的任何数量的输入(例如数量 - 5000和产品 - P001)然后我必须给他回报行数据..我的意思是在哪个批次他的数量将满足,它应该是日期明智的......首先结束
Batch |Product | Date | Quantity |
------------+---------+--------------------+-----------+
D001 |P001 | 1Jul2017 | 1000 |
D002 |P001 | 10Jul2017 | 2000 |
D003 |P001 | 15Jul2017 | 3000 |
D004 |P001 | 18Jul2017 | 5500 |
D005 |P002 | 12Jul2017 | 3000 |
D006 |P002 | 14Jul2017 | 2000 |
D007 |P002 | 15Jul2017 | 4000 |
最终输出应该是这样的。
Batch |Product | Date | Quantity |
------------+---------+--------------------+-----------+
D001 |P001 | 1Jul2017 | 1000 |
D002 |P001 | 10Jul2017 | 2000 |
D003 |P001 | 15Jul2017 | 2000 |
答案 0 :(得分:0)
你似乎想要累积总和。我们假设您想要的数量在@quantity
。然后 。 。
select t.*,
(case when cume_q < @quantity then quantity
else cume_q - @quantity
end) as used_quantity
from (select t.*, (@q := @q + t.quantity) as cume_q
from t cross join
(select @q := 0) params
where product = @product
order by date
) t
where (cume_q - quantity) < @quantity;
子查询计算累积总和。您可以单独运行它,看看发生了什么。如果你想了解MySQL中的变量,我建议你去做文档。
外部where
只需选择您想要的行,一旦有累积总和。