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