以下のような有効期間テーブルから、、
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 ;