SQL查询来计算不受股市
满足销售订单的第一次出现我有两个表:SQL查询来计算不受股市
- 销售订单(SO)与领域:第一部分,DUE_DATE,数量
- 部分与场部和股票。
我试图编写一个查询,它将产生第一次出现(按日期 - SO.Due_Date)销售订单(SO.Qty)不能由股票满足的情况。
这是容易的,如果没有现货,即Part.Stock = 0或如果只有一个销售订单的部分(SO.Qty> Part.Stock)
如果有多个销售订单,我只想要显示第一个例如
Part.Part = Box , Part.Stock = 250
SO.Part | SO.Due_Date | SO.Qty
Box | 26/10/2014 | 100
Box | 27/10/2014 | 100
Box | 28/10/2014 | 100 * Return this row
Box | 29/10/2014 | 100
我想我需要一个子查询或需要使用CTE,但我不能解决它,除非我使用循环。这些表有成千上万的零件和销售订单,我试图尽快运行这个查询。
非常感谢您的帮助
我想这是一个学习的过程,因为没有实际的业务会以这种方式工作。 总之,这里是一个查询到你想要的东西:
select *
from sales_order as so1
where due_date =
(select min(due_date)
from sales_order as so2
inner join part as p on p.part = so2.part
where so1.part = so2.part
and stock < (
select sum(quantity)
from sales_order as so3
where so3.due_date <= so2.due_date
and so3.part = so2.part
)
)
我已经投入工作小提琴这里:http://sqlfiddle.com/#!2/bd8ab5/1 有一些假设每日期,例如一个订单,但我相信它回答的问题。
非常感谢您的答案,并在SQL小提琴上显示。它工作完美。 – PurbeckPlodder 2014-10-27 11:51:44
使用自加入计算量运行总每一行,并与具有运行总计超过p.stock更大最小的到期日选择行查询
select so.part, so.due_date, so.quantity
from sales_order so
join part p on p.part = so.part
join sales_order so2 on so2.part = so.part
and so2.due_date <= so.due_date
where p.part = 'Box'
group by so.part, so.due_date, so.quantity
having sum(so2.quantity) > max(p.stock)
order by so.due_date limit 1
感谢您的贡献。我会尝试你的建议,但可能需要编辑许多不同的部分,而不仅仅是“盒子”。我无法在开发系统(我的笔记本电脑)上试用它,因为上周末他的女朋友扔下楼梯时,老板刚把它拿走了。我明天可能会收回我的! – PurbeckPlodder 2014-10-27 11:56:18
您正在使用哪个数据库管理系统? Postgres的?甲骨文? – 2014-10-26 21:02:31
我不明白。您想要分组的列数,为什么'28/10/2014'行是所需的行?这不是第一行。 – 2014-10-26 21:11:41