4 回の支払いとして、最も低い 4 つの異なる日付を選択したいようです。これを取得するためのわかりやすい方法を紹介します。
- お支払い方法を探す1
- 再度テーブルに参加して payment2 を見つけます
- 支払いを見つけるためにテーブルに再び参加します3
- ...
最終結果は次のとおりです。
with step1 as (
select id, min(date) as payment1
from ps
group by id
), step2 as (
select step1.*, min(date) as payment2
from step1
join ps on step1.id = ps.id
where step1.payment1 < ps.date
group by step1.id, payment1
), step3 as (
select step2.*, min(date) as payment3
from step2
join ps on step2.id = ps.id
where step2.payment2 < ps.date
group by step2.id, payment1, payment2
), step4 as (
select step3.*, min(date) as payment4
from step3
join ps on step3.id = ps.id
where step3.payment3 < ps.date
group by step3.id, payment1, payment2, payment3
)
select * from step4
これが実際の動作を示すフィドルです: http://sqlfiddle.com/#!3/66576/8
これで 4 つの結合が行われるため、パフォーマンスは最適ではありません。パフォーマンスに問題がある場合は、日付をランク付けし、最低 4 つ (重複を除く) を選択してから、テーブルをピボットします。