SQL Server 2008 R2 在特定条件下选择特定行
SQL Server 2008 R2 Choose Certain Rows on Certain Conditions
编辑:对不起,项目不应该是A和B,它们都是A。但是,当它们有不同的in_date时,它们被认为是不同的。所以,我相应地编辑了我的问题。
我有问题。请参阅下面的 table:
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
如您所见,table 按列 "Created_At" desc 排序。现在,我需要的是获取 "Qty_Balance" 数据,但每个项目只获取最后输入的数据。所以,对于A,我需要得到90的"Qty_Balance",而对于B,我需要得到50的"Qty_Balance"。我们可以通过参考[=21=来判断最后输入的数据。 ] 列,这就是列降序排列的原因。所以,为了清楚起见,我需要的是:
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
我怎样才能做到这一点?请帮助我。提前谢谢你。
你可以尝试用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
在应用关联的 window 函数之前确定行集的分区和排序。
编辑:对不起,项目不应该是A和B,它们都是A。但是,当它们有不同的in_date时,它们被认为是不同的。所以,我相应地编辑了我的问题。
我有问题。请参阅下面的 table:
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
如您所见,table 按列 "Created_At" desc 排序。现在,我需要的是获取 "Qty_Balance" 数据,但每个项目只获取最后输入的数据。所以,对于A,我需要得到90的"Qty_Balance",而对于B,我需要得到50的"Qty_Balance"。我们可以通过参考[=21=来判断最后输入的数据。 ] 列,这就是列降序排列的原因。所以,为了清楚起见,我需要的是:
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
我怎样才能做到这一点?请帮助我。提前谢谢你。
你可以尝试用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
在应用关联的 window 函数之前确定行集的分区和排序。