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