と窓関数を用いて、MIN日を選択:好ましくは、(ウィンドウがない場合にも働くことができることにより、サブクエリグループ)ウィンドウ関数を使用して表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 |
+----+------+-----------+------+
、
をIが必要それはだように、各ID
グループによってCode= A
最も早いSDate
を抽出する早いSDate
Code=B
さん早いSDate
後。これまでにない。だから、所望の出力:
+----+------+-----------+
| ID | Name | SDate |
+----+------+-----------+
| 1 | Ash | 4/12/2016 |
| 2 | Brat | 8/7/2016 |
+----+------+-----------+
コードの試み:
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
これは私に、各個別のIDについてCode=A
最も早いSDate
を与え、ない早い早い後Code=B
idには複数のコード= Bがありますか? –
コード** B **については何がわかっていますか?名前ごとに常に1つのオカレンスですか? –
はい。いい視点ね。だから最古のコード= Bの後の最古のコード= A。質問が更新されました。 – AS91