2011-09-21 63 views
0

我有一个表ABCSql表格过滤器?

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 

该表格数据是指由日期时间

+0

只要提及......这应该不会发生,id应该是唯一的。 – Jaanus

回答

3

使用的CTE与顶部1 sub_id顺序不同id和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 

The CTE(Common Ta ble表达式)将按Id“分区”您的数据,并给出每个组的条目ROW_NUMBER值,从1开始,按日期降序排序(最新的日期优先)。每个组的第一个条目 - 每个Id的最新条目 - 具有RowNum = 1