根据查询子集的最早日期筛选查询结果

时间:2015-03-09 16:40:31

标签: sql tsql filter ssms partition

我构建了一个返回表的查询:

| NAME   | DATE   |
| Item 1 | Date 1 |
| Item 1 | Date 2 |
| Item 1 | Date 3 |
| Item 2 | Date 1 |
| Item 2 | Date 2 |
| Item 3 | Date 1 |
| Item 3 | Date 2 |
| Item 3 | Date 3 |
| Item 3 | Date 4 |

基本上是一对多的分组。我想从这个结果集中过滤掉每个项目最早的日期行。含义,对于每个项目,删除具有最高日期的行(删除每个“项目”的“日期1”)。如何在删除“日期1”行的情况下返回此查询?

Ex输出:

| NAME   | DATE   |
| Item 1 | Date 2 |
| Item 1 | Date 3 |
| Item 2 | Date 2 |
| Item 3 | Date 1 |
| Item 3 | Date 3 |
| Item 3 | Date 4 |

1 个答案:

答案 0 :(得分:4)

;WITH CTE AS
(
   SELECT *,
          RN = ROW_NUMBER() OVER(PARTITION BY Name ORDER BY [Date])
   FROM (...Your query here...) T
)
SELECT *
FROM CTE 
WHERE RN > 1;