sql - 如何在 SQL 中仅提取第一张收据的数量
问题描述
我正在尝试运行一个 SQL,我想在其中查看采购订单编号的第一个收据编号和第一个收据编号的接收数量。
我的 SQL 提取了第一个收据号码,但我没有得到第一个收据号码的数量,而是我得到了购买号码的总接收数量
这是我的 SQL:
Select
a.Purchase_Order_Number,
min(b.Purchase_Receipt_Number) PO_Receipt_NUMBER,
min(c.Full_Date) Received_Date,
sum(b.TRANSACTION_RECEIVED_ITEM_QUANTITY) PO_Receive_Qty
from f_Purchase_Order a
join f_Purchase_Receipt b
on a.Purchase_Order_Key = b.Purchase_Order_Key
join d_Date c
on (b.Received_Date_Key = c.Date_Key)
where a.Purchase_Order_Number = '870892'
group by
a.Purchase_Order_Number
解决方案
如果您想要第一行,请不要使用GROUP BY
. ORDER BY
和LIMIT
:
Select po.Purchase_Order_Number,
pr.Purchase_Receipt_Number,
d.Full_Date as Received_Date,
pr.TRANSACTION_RECEIVED_ITEM_QUANTITY as PO_Receive_Qty
from f_Purchase_Order po join
f_Purchase_Receipt pr
on po.Purchase_Order_Key = pr.Purchase_Order_Key join
d_Date d
on pr.Received_Date_Key = d.Date_Key
where pr.Purchase_Order_Number = '870892'
order by d.Date_Key
limit 1;
请注意,我还修复了表别名,以便它们识别它们来自的表。
编辑:
如果你想要这一切Purchase_Order_Numbers
,你会使用qualify
:
Select po.Purchase_Order_Number,
pr.Purchase_Receipt_Number,
d.Full_Date as Received_Date,
pr.TRANSACTION_RECEIVED_ITEM_QUANTITY as PO_Receive_Qty
from f_Purchase_Order po join
f_Purchase_Receipt pr
on po.Purchase_Order_Key = pr.Purchase_Order_Key join
d_Date d
on pr.Received_Date_Key = d.Date_Key
order by d.Date_Key
qualify row_number() over (partition by Purchase_Order_Key order d.Date_Key) = 1;
推荐阅读
- python - 使用 Keras 训练具有两个不同输出的相同模型
- python - struct.pack 比它的部分长?
- javascript - postman pm 设置环境变量
- azure-functions - 尝试从 Azure 函数中的 blob 存储读取文件会产生“系统找不到指定的文件”
- r - 如何从列中消除“[”?
- c++ - 如何设置 libgps 调试级别?
- excel - 如何创建宏以在我当前选择的列上执行 TextToColumn,目标必须是相同的列
- javascript - 如何在重新定向时获取用户输入的 Chrome 新标签的 URL
- c++ - 大小的时间复杂度是多少?
- hasura - hasura_session 不带参数的调用