使用带有附加行条件的WINDOW函数的SELECT MIN Date

时间:2016-12-21 19:15:55

标签: sql sql-server tsql sql-server-2012 group-by

表TT:

+----+------+-----------+------+
| ID | Name |   SDate   | Code |
+----+------+-----------+------+
|  1 | Ash  | 4/12/2016 | A    |
|  1 | Ash  | 4/19/2016 | A    |
|  1 | Ash  | 2/14/2016 | B    |
|  1 | Ash  | 1/1/2016  | A    |
|  2 | Brat | 9/21/2016 | A    |
|  2 | Brat | 8/7/2016  | A    |
|  2 | Brat | 8/19/2016 | B    |
|  2 | Brat | 11/21/2016| B    |
+----+------+-----------+------+

最好使用窗口函数(如果窗口没有,则子查询分组也可以工作),

我需要为每个SDate组提取Code= A的最早ID,这样{{1>}之后的最早 SDate } 最早 Code=B。不是之前。所以期望输出

SDate

代码尝试:

+----+------+-----------+
| ID | Name |   SDate   |
+----+------+-----------+
|  1 | Ash  | 4/12/2016 |
|  2 | Brat | 8/7/2016  |
+----+------+-----------+

这为每个不同的ID提供了最早的SELECT DISTINCT TT.ID AS ID ,TT.Name AS Name ,MIN(CASE WHEN TT.Code='A' THEN TT.SDate END) OVER (PARTITION BY TT.ID) AS SDate FROM TT ORDER BY TT.ID SDate,而不是最早的Code=A

1 个答案:

答案 0 :(得分:3)

获取每个ID的最小B日期,并在此日期之后获得最短的A日期。

预期结果应该是' 21/2016'对于小子。

{{1}}