Item Number | Customer | Creation Date | Onhand Qty
123 1 03-FEB-19 654
234 3 03-FEB-19 987
789 5 03-FEB-19 874
321 4 03-FEB-19 147
567 7 03-FEB-19 632
123 1 29-JAN-19 547
234 3 29-JAN-19 814
789 5 29-JAN-19 458
321 4 29-JAN-19 330
567 7 29-JAN-19 118
我已经在上面设置了此数据,但是用于数千个项目和数百个客户。
我想做的只是返回最新的“手头数量”字段,所以max(creation_date)取决于项目和客户。
Item Number | Customer | Creation Date | Onhand Qty
123 1 03-FEB-19 654
234 3 03-FEB-19 987
789 5 03-FEB-19 874
321 4 03-FEB-19 147
567 7 03-FEB-19 632
有效地,我试图按客户和物料查找最近的在手数量,所以我可以说在最近的检查中,“客户1有654个单位的物料123”。
有人可以帮助我吗?
这在Oracle数据库(V11)中。
非常感谢
答案 0 :(得分:0)
使用row_number()
select * from (select *,row_number() over(partition by Customer order by creation_date desc,qty desc) rn from table
) t where t.rn=1
答案 1 :(得分:0)
使用ROW_NUMBER()
如下:
SELECT * FROM (
SELECT t.*, ROW_NUMBER() OVER(PARTITION BY Customer, Item_Number ORDER BY creation_date DESC) rn
FROM mytable t
) WHERE rn = 1
在子查询中,ROW_NUMBER()
为具有相同客户/项目的记录组中的每个记录分配一个序列号。序列按创建日期降序排列(因此,最高日期排在最前面)。然后,外部查询将对每个组中的第一条记录进行过滤。
此 DB Fiddle demo 及其示例数据将返回:
ITEM_NUMBER | CUSTOMER | CREATION_DATE | ONHAND_QTY | RN ----------: | -------: | :------------ | ---------: | -: 123 | 1 | 29-JAN-19 | 547 | 1 234 | 3 | 29-JAN-19 | 814 | 1 321 | 4 | 29-JAN-19 | 330 | 1 789 | 5 | 29-JAN-19 | 458 | 1 567 | 7 | 29-JAN-19 | 118 | 1
答案 2 :(得分:0)
您可以尝试使用row_number()并在over子句中添加partition by Customer,item order by creation_date desc
select * from
(
select *,row_number() over(partition by Customer,item order by creation_date desc) rn from table
)A where rn=1