QA@IT

主テーブルのレコードをSQLで補完する

3604 PV

可能かどうかわかりませんが、以下のようなことをSQLでやりたいと思っています。
テーブル1の開始日から終了日までテーブル2のデータが連続するように補完したいです。
SQLに詳しい方、よろしくお願いいたします。

テーブル1
MainID     開始日     終了日
000001 2015/01/01 2015/06/30

テーブル2
MainID SubID 適用開始日 適用終了日
000001 S___A 2015/02/01 2015/02/25
000001 S___B 2015/05/01 2015/06/30


取得結果
MainID SubID 適用開始日 適用終了日
000001  NULL 2015/01/01 2015/01/31
000001 S___A 2015/02/01 2015/02/25
000001  NULL 2015/02/26 2015/04/30
000001 S___B 2015/05/01 2015/06/30

回答

自決しました。
テーブル1から強制的にテーブル2の期間前後を作り、テーブル2の中間を埋めて要らないデータを取り除いたらできました。
これで最後にテーブル2を連結させれば目的の取得結果が取れました。

With SubEx As (Select * From SubTable
         Union Select MainID, Null, DATEADD(day, 1, EndDate), Null From MainTable
         Union Select MainID, Null, Null, DATEADD(day, -1, StartDate) From MainTable)
Select * From (
Select MainID
     , Null As SubID
     , DATEADD(day, 1, TEndDate) As TStartDate
     , (Select DATEADD(day, -1, MIN(TStartDate)) From SubEx T2 Where T2.MainID = T1.MainID And T2.TStartDate > T1.TEndDate) As TEndDate
  From SubEx T1 ) H
 Where TEndDate Is Not Null
   And TStartDate <= TEndDate;
編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。