【PostgreSQL】グループ別のソート結果の先頭行のみ抽出したい

PostgreSQL
スポンサーリンク

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;

実行結果

f:id:TechnologyShare:20200922195150p:plain

あとは順位付けされたrankに対して、サブクエリなどで条件をつけて抽出すれば、1番のみ抽出などが可能になります。

以上です。

コメント

タイトルとURLをコピーしました