2017-09-14 69 views
0

我有如下表:过滤器具有最新的日期重复表的OrderID

enter image description here

我需要过滤掉的行,其起始日期是最新的对应其订单ID。参照给定的表第2行和第3行应该是输出。 由于第1行和第2行具有相同的订单ID和订单日期,但开始日期晚于第一行。第3行和第4行也是一样,因此我需要取出第3行。我正在尝试在SQL服务器中编写查询。任何帮助表示赞赏。请让我知道,如果你需要更多details.Apologies英语差

+1

*不*标记垃圾邮件不相关的产品。 – Siyual

回答

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 
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。如果是这样的话,你需要将值CONVERTDATETIME

;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