表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
答案 0 :(得分:3)
获取每个ID的最小B日期,并在此日期之后获得最短的A日期。
预期结果应该是' 21/2016'对于小子。
{{1}}