2016-11-28 54 views
0

我有一個表抽象低於
Table_A
(RecordID int PK, LotID int, BatchID int, StatusID int, StatusTime datetime)
通過LotID確定每個批次可以通過BatchID確定多批次,每個批次的狀態進行跟蹤。 每次狀態變化,一個新的記錄插入Table_A表明LotIDBatchIDStatusIDStatusTime。 我需要爲每個批次過濾單個最新記錄。我可以使用單個SELECT DISTINCT聲明嗎?或者我應該嘗試JOIN表格本身,ORDER BYStatusTimeSELECT TOP 1記錄每個LotID'+ BatchID` set?你會如何在T-SQL中刺探它?選擇組

回答

1

row_number()列創建一個數據集命令數據的一個子集:

;WITH cte AS (
    SELECT 
     RecordID 
    , LotID 
    , BatchID 
    , StatusID 
    , StatusTime 
    , batchrank = ROW_NUMBER() 
        OVER(PARTITION BY BatchId 
         ORDER BY StatusTime DESC) 
    FROM Table_A 
) 
SELECT * 
FROM cte 
WHERE batchrank = 1 
+0

偉大的作品!這些函數在大型表上的性能方面如何?任何索引建議? – ArtK