MySQL
[SQL]特定グループの各最大レコードを取得したい
ヤス
更新日:2021/08/12
どうも、ヤスです。
今回のやりたいことはこんな感じです。
↓↓↓↓↓こんなデータがあったとき↓↓↓↓↓
ID(主キー) | NO(主キー) | date |
---|---|---|
1 | 1 | 2015-12-10 |
1 | 2 | 2016-08-09 |
1 | 3 | 2016-09-05 |
2 | 1 | 2012-04-30 |
2 | 2 | 2013-10-10 |
3 | 1 | 2012-01-02 |
↓↓↓↓↓こんな感じでデータを取りたい↓↓↓↓↓
ID(主キー) | NO(主キー) | date |
---|---|---|
1 | 3 | 2016-09-05 |
2 | 2 | 2013-10-10 |
3 | 1 | 2012-01-02 |
要するにIDをグループとして、Noの最大値をとりつつ、IDとNoに紐付いたDATEも取得したい。
これでどうでしょう。。
1 |
SELECT id, MAX(no), date FROM hogehoge GROUP BY id |
んー、これでは、dateカラムが正しく取得できないし、SQLが不正。
こんなんええやん
「最大」を「他に当該値以下の値がない」と読むの術!
1 2 3 4 5 6 7 8 9 10 11 |
SELECT hoge1.id , hoge1.no , hoge1.date FROM hogehoge hoge1 WHERE /* IDグループ内で他に当該値以下の値がなければTRUE */ NOT EXISTS( SELECT 1 FROM hogehoge hoge2 WHERE hoge1.id = hoge2.id AND hoge1.no < hoge2.no ) |
複合キーに限らず、同一グループ内で最大レコードを取りたい需要はあるのでは?