编辑:很抱歉,这些项目不应该是A和B,它们都是A。但是,当它们的in_date不同时,它们被认为是不同的。因此,我已经相应地编辑了我的问题。
我有问题。参见下表:
Item | In_Date | Qty_Balance | Created_At
-----+---------+-------------+---------------------------
A | 1 | 90 | 2018-09-26 16:09:26.523
A | 1 | 96 | 2018-09-26 15:26:12.507
A | 2 | 50 | 2018-09-26 15:24:43.617
A | 2 | 45 | 2018-09-24 15:47:40.977
如您所见,该表按列“ Created_At” desc排序。现在,我需要获取“ Qty_Balance”数据,但每个项目只有最后输入的一个。因此,对于A,我需要获得“ Qty_Balance”为90,而对于B,我需要获得“ Qty_Balance”为50。我们可以通过参考“ Created_At”列来判断最后输入的数据。该列按降序排列。因此,为了清楚起见,我需要的是:
Item | In_Date | Qty_Balance | Created_At
-----+---------+-------------+-------------------------
A | 1 | 90 | 2018-09-26 16:09:26.523
A | 2 | 50 | 2018-09-26 15:24:43.617
我怎么可能做到这一点?请帮助我。预先谢谢你。
答案 0 :(得分:0)
您可以尝试使用ROW_NUMBER window function从In_Date
进行分组,以创建行号order by Created_At DESC
,然后获取行号为1
行。
Select
Item ,
In_Date ,
Qty_Balance ,
Created_At
from (
SELECT *,ROW_NUMBER() OVER(PARTITION BY In_Date ORDER BY Created_At DESC) rn
FROM T
)t1
where rn = 1
注意
ROW_NUMBER
函数生成行号。
Window function
确定在应用关联的窗口函数之前行集的分区和顺序。