OVER (PARTITION BY ~)は、指定したカラム単位のソートし先頭のみ抽出したいといった時に非常に便利なSQLです。
OVER (PARTITION BY ~)
基本構文は下記の通りです。
SELECT RANK() OVER(PARTITION BY 集計単位のカラム名 ORDER BY ソートキー) FROM テーブル名
実行例
検索対象テーブル
下記のテーブルに対して性別ごとにログイン日付が最新のレコードを抽出します。
kaiin_no | age | sex | login_nitiji | name |
---|---|---|---|---|
1 | 22 | 男性 | 20200711 | 田中 |
2 | 27 | 男性 | 20190911 | 太田 |
3 | 29 | 女性 | 20181221 | 木村 |
4 | 17 | 男性 | 20200301 | 杉本 |
5 | 30 | 女性 | 20200711 | 中村 |
6 | 43 | 男性 | 20190203 | 大山 |
7 | 26 | 男性 | 20200801 | 石橋 |
SQL実行結果
サンプルSQL
SELECT *, RANK() OVER (PARTITION BY sex order by login_nitiji DESC) as rank FROM kaiin_login_info;
実行結果
あとは順位付けされたrankに対して、サブクエリなどで条件をつけて抽出すれば、1番のみ抽出などが可能になります。
以上です。
コメント