我有如下表:过滤器具有最新的日期重复表的OrderID
我需要过滤掉的行,其起始日期是最新的对应其订单ID。参照给定的表第2行和第3行应该是输出。 由于第1行和第2行具有相同的订单ID和订单日期,但开始日期晚于第一行。第3行和第4行也是一样,因此我需要取出第3行。我正在尝试在SQL服务器中编写查询。任何帮助表示赞赏。请让我知道,如果你需要更多details.Apologies英语差
我有如下表:过滤器具有最新的日期重复表的OrderID
我需要过滤掉的行,其起始日期是最新的对应其订单ID。参照给定的表第2行和第3行应该是输出。 由于第1行和第2行具有相同的订单ID和订单日期,但开始日期晚于第一行。第3行和第4行也是一样,因此我需要取出第3行。我正在尝试在SQL服务器中编写查询。任何帮助表示赞赏。请让我知道,如果你需要更多details.Apologies英语差
使用派生表的另一种方法。
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
您可以用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
*不*标记垃圾邮件不相关的产品。 – Siyual