2016-06-14 51 views
0

我的問題是,因爲人們對我們的運輸訂單犯了錯誤,並且創建了另一個追蹤#來修正訂單,因此存在欺詐行爲。所以我總是需要得到訂單的最後一個副本,所以我得到正確的跟蹤#。獲取最後一個副本

我已經試過這樣:

SELECT OrderNum, TrackingNumber, CreatedDate, CreatedBy, Carrier 
FROM FPDWDB1.Ship.dbo.ShippingLog 
GROUP BY OrderNum 

我收到以下錯誤:

Column 'FPDWDB1.Ship.dbo.ShippingLog.TrackingNumber' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

+0

如果使用GROUP BY,所有其他列以外該組需要被用在一個聚合函數中,即max,avg等等。它聽起來像像你需要一個row_number(),它是決定最新記錄的CreatedDate? – artm

回答

0
Select OrderNum, TrackingNumber, CreatedDate, CreatedBy, Carrier 
FROM (
SELECT OrderNum, TrackingNumber, CreatedDate, CreatedBy, Carrier 
     ,ROW_NUMBER() OVER (PARTITION BY OrderNum ORDER BY CreatedDate DESC) rn 
FROM FPDWDB1.Ship.dbo.ShippingLog 
) A Where rn = 1 

OR

WITH A AS (
SELECT OrderNum, TrackingNumber, CreatedDate, CreatedBy, Carrier 
     ,ROW_NUMBER() OVER (PARTITION BY OrderNum ORDER BY CreatedDate DESC) rn 
FROM FPDWDB1.Ship.dbo.ShippingLog 
) 
Select OrderNum, TrackingNumber, CreatedDate, CreatedBy, Carrier 
FROM A 
Where rn = 1