やる気がストロングZERO

やる気のストロングスタイル

GROUP BYでまとめてそのLASTやFIRSTを取りたい場合のsqlの書き方(window関数を使う)

以下のような有効期間テーブルから、、

id ユーザーid 有効期間from 有効期間to
1 1 2020-6-1 2020-7-1
2 1 2020-7-1 2020-8-1
3 2 2020-5-1 2020-6-1
4 2 2020-6-1 2020-7-1

以下のようなデータ(ユーザー毎に最新の有効期間のレコード)を取得したい

id ユーザーid 有効期間from 有効期間to
2 1 2020-7-1 2020-8-1
4 2 2020-6-1 2020-7-1

window関数を使えればこんな感じ

WITH tmp_t AS (
    SELECT *, row_number() over (partition by ユーザーid order by 有効期間to DESC) AS row_num FROM 有効期間テーブル
)
SELECT * FROM tmp_t
WHERE row_num = 1
;