使用具有重复OrderId的最新日期过滤表

时间:2017-09-14 20:10:15

标签: sql sql-server

我有以下表格:

enter image description here

我需要过滤掉与其订单ID对应的最新开始日期的行。对于给定的表行,引用第2行和第3行应该是输出。  由于第1行和第2行具有相同的订单ID和订单日期,但开始日期晚于第一行。第3行和第4行也是如此,因此我需要取出第3行。我试图在SQL服务器中编写查询。任何帮助表示赞赏。如果您需要更多详细信息,请告诉我。英语不佳的语言

2 个答案:

答案 0 :(得分:2)

您可以使用ROW_NUMBER()窗口函数轻松完成此操作:

;With Cte As
(
    Select  *,
            Row_Number() Over (Partition By OrderId Order By StartDate Desc) RN
    From    YourTable
)
Select  *
From    Cte
Where   RN = 1

但我质疑StartDate数据类型。看起来这些存储为VARCHAR。如果是这种情况,您需要CONVERT DATETIME的值:

;With Cte As
(
    Select  *,
            Row_Number() Over (Partition By OrderId 
                               Order By Convert(DateTime, StartDate) Desc) RN
    From    YourTable
)
Select  *
From    Cte
Where   RN = 1

答案 1 :(得分:1)

使用派生表的另一种方法。

select
     t.*
from 
   YourTable t
inner join
(select OrderId, max(StartDate) dt
 from YourTable
 group by OrderId) t2 on t2.dt = t.StartDate and t2.OrderId = t.OrderId