根据查询子集的最早日期过滤查询结果
Filter query result based on earliest date for subset of query
我构建了一个查询,它将 return 一个 table 这样的:
| 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 |
基本上是一对多的分组。我想从这个结果集中过滤掉每个项目的最早日期的行。意思是,对于每个项目,删除具有最高日期的行(为每个 'Item' 删除 'Date 1')。我如何 return 这个查询删除了 "Date 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 |
;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;
我构建了一个查询,它将 return 一个 table 这样的:
| 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 |
基本上是一对多的分组。我想从这个结果集中过滤掉每个项目的最早日期的行。意思是,对于每个项目,删除具有最高日期的行(为每个 'Item' 删除 'Date 1')。我如何 return 这个查询删除了 "Date 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 |
;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;