选择最新记录组

时间:2016-11-28 19:15:23

标签: sql-server tsql

下面有一张摘要表
Table_A
(RecordID int PK, LotID int, BatchID int, StatusID int, StatusTime datetime)
LotID标识的每个批次都可以由BatchID标识多个批次,并跟踪每个批次的状态。 每次状态更改时,都会在Table_A中插入新记录,指示LotIDBatchIDStatusIDStatusTime。 我需要为每个批次过滤一个最新记录。我可以使用单个SELECT DISTINCT语句执行此操作,还是应该尝试JOIN自己的表格,ORDER BY StatusTimeSELECT TOP 1记录每个LotID'+ } BatchID`设置?你会如何在T-SQL中尝试它?

1 个答案:

答案 0 :(得分: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