我有一张表ABC
Id Sub_id Date
CS01032 Sub012 2011-09-21 16:29:58.853
CS01033 Sub013 2011-09-21 16:30:09.863
CS01033 Sub014 2011-09-21 16:30:12.113
CS01034 Sub015 2011-09-21 16:37:57.233
CS01035 Sub016 2011-09-21 16:51:52.527
CS01035 Sub017 2011-09-21 16:51:54.430
CS01035 Sub018 2011-09-21 16:51:56.333
我希望过滤此表数据,如
Id Sub_id Date
CS01032 Sub012 2011-09-21 16:29:58.853
CS01033 Sub014 2011-09-21 16:30:12.113
CS01034 Sub015 2011-09-21 16:37:57.233
CS01035 Sub018 2011-09-21 16:51:56.333
表示按日期时间排名前1的sub_id顺序的不同ID
答案 0 :(得分:3)
使用CTE和ROW_NUMBER
功能:
;WITH TopData AS
(
SELECT Id, Sub_Id, Date,
ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Date DESC) AS 'RowNum')
FROM
dbo.ABC
)
SELECT Id, Sub_Id, Date
FROM TopData
WHERE RowNum = 1
CTE(公用表格表达式)将按Id
对数据进行“分区”,并为每个组的条目ROW_NUMBER
提供值,从1开始,按日期降序排序(最新日期优先)。每个组的第一个条目 - 每个Id
的最新条目 - 都有RowNum = 1