Tech`s Report

MENU

【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番のみ抽出などが可能になります。  

以上です。