0

変換する必要がある何百万行ものファイルがあります。望ましい結果を得るのに苦労しているので、専門家に任せたいと思いました。

select
[ID],
min ([date]) as 'Payment1',
min ([date]) as 'Payment2', 
where 'Payment2' > 'Payment1'
min ([date]) as 'Payment3', 
where 'Payment3' > 'Payment2'
min ([date]) as 'Payment4', 
where 'Payment4' > 'Payment3'
from [FP&A].[dbo].[PaymentSchedules]
group by [ID]
order by [ID]
4

2 に答える 2

0

4 回の支払いとして、最も低い 4 つの異なる日付を選択したいようです。これを取得するためのわかりやすい方法を紹介します。

  1. お支払い方法を探す1
  2. 再度テーブルに参加して payment2 を見つけます
  3. 支払いを見つけるためにテーブルに再び参加します3
  4. ...

最終結果は次のとおりです。

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 つ (重複を除く) を選択してから、テーブルをピボットします。

于 2013-07-26T00:19:47.367 に答える