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

PostgreSQL

OVER (PARTITION BY ~)は、指定したカラム単位のソートし先頭のみ抽出したいといった時に非常に便利なSQLです。

スポンサーリンク

OVER (PARTITION BY ~)

基本構文は下記の通りです。

SELECT RANK() OVER(PARTITION BY 集計単位のカラム名 ORDER BY ソートキー) FROM テーブル名

実行例

検索対象テーブル

下記のテーブルに対して性別ごとログイン日付最新のレコードを抽出します。

kaiin_noagesexlogin_nitijiname
122男性20200711田中
227男性20190911太田
329女性20181221木村
417男性20200301杉本
530女性20200711中村
643男性20190203大山
726男性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をコピーしました