2016-11-28 13 views
0

私はLotIDで識別される各ロットはBatchIDで識別される複数のバッチを持つことができ、各バッチのステータスが追跡され
Table_A
(RecordID int PK, LotID int, BatchID int, StatusID int, StatusTime datetime)
以下の抽象を持つテーブルを持っています。 ステータスが変わるたびに、Table_ALotID,BatchID,StatusIDおよびStatusTimeを示す新しいレコードが挿入されます。 バッチごとに1つの最新レコードをフィルタリングする必要があります。私はSELECT DISTINCTの単一の文でそれを行うことができますか?JOINそれ自身の上にテーブルORDER BYStatusTimeSELECT TOP 1レコードごとに試してみてください。LotID'+バッチIDがセットされていますか?あなたは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