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 functionIn_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

SQLFIDDLE

注意

  • ROW_NUMBER函数生成行号。

  • Window function 在应用关联的 window 函数之前确定行集的分区和排序。