2017-05-24 51 views
0

假設我有一個名爲訂單和字段CustomerId,EmployeeId,OrderDate的表如何在使用GROUP BY和MAX時選擇其他表字段?

我想通過最新OrderDate爲每個CustomerId選擇所有這些字段。

到目前爲止,我已經成功地選擇客戶ID和訂購日期,但我不知道如何將僱員

SELECT [CustomerId], MAX(OrderDate) 
     FROM [Orders] 
     GROUP BY [CustomerId] 
     ORDER BY [CustomerId] 

回答

1

使用row_number()

select o.* 
from (select o.*, 
      row_number() over (partition by customerid order by orderdate desc) as seqnum 
     from orders o 
    ) o 
where seqnum = 1; 

這是「傳統」解。如果您有所有客戶的列表,我喜歡使用cross apply的解決方案:

select o.* 
from customers c cross apply 
    (select top 1 o.* 
     from orders o 
     where o.customerid = c.customerid 
     order by o.orderdate desc 
    ) o; 
+0

幾乎...需要通過orderdate命令 – Lamak