我有一个现有数量表,其中列出了零件清单.我还有第二张表,其中包含一系列订购发货日期和所需数量.
我想返回下一个订单的发货日期,而该订单将不再可用.
例如:
表1,A,B和C部分的现有数量:
Name Qty-Have
A 10
B 10
C 5
表2,A,B和C部分的未来两个月的未来订单:
Name Due Qty-Need
A 11/10/17 4
A 11/15/17 6
A 11/20/17 3
A 11/25/17 10
B 11/12/17 4
B 12/15/17 4
B 12/29/17 4
C 11/10/17 7
结果,我们将在库存不足时的最早订购日期:
Name Next Due Qty-Want
A 11/20/17 13
B 12/29/17 2
C 11/10/17 2
我知道我可以对表2进行分组,并减去库存以获得数量,但是我不知道如何获取下一个未发现订单的下一个发货日期.
A部分的前两个订单我们都有库存,我想知道我们的第三个订单(11/20/17)还不够,我们应该制造13个零件以满足所有剩余需求.
解决方法:
如果您有可用的窗口函数(SQL Server或MySQL 8及更高版本),请使用以下查询:
select h.name Name, min(o.due) Next_Due, max(o.sumQty) - h.Qtyhave Qty_Want
from
(
select *, sum(QtyNeed) over (partition by name order by due) sumQty
from orders
) o
right join onHand h on o.name = h.name and o.sumQty > h.Qtyhave
group by h.name, h.Qtyhave
demo-适用于SQL Server以及MySQL 8及更高版本
结果
Name Next Due Qty-Want
----------------------------------
A 11/20/17 13
B 12/29/17 2
C 11/10/17 2
标签:sql,mysql,sql-server
来源: https://codeday.me/bug/20191110/2014992.html