Oracle 11i - CUSTOM 値が STANDARD 値をオーバーライドし、STANDARD 値がオーバーライドされない場所に保持される一連の日付範囲を作成するクエリを探しています。
STANDARD
CUSTOMER_ID START_DATE END_DATE VALUE
0001 02/01/2013 09/15/2013 10
CUSTOM
CUSTOMER_ID START_DATE END_DATE VALUE
0001 01/15/2013 03/15/2013 20
0001 07/01/2013 07/31/2013 30
Desired Result
CUSTOMER_ID START_DATE END_DATE VALUE
0001 02/01/2103 03/15/2013 20
0001 03/16/2013 06/30/2013 10
0001 07/01/2013 07/31/2013 30
0001 08/01/2013 09/15/2013 10
試運転の結果は次のとおりです。
select sc.customer_id, sc.thedate as start_date,
lead(**sc.thedate**) over (partition by sc.customer_id order by sc.thedate) as end_date,
sc.value
from (select customer_id, start_date as thedate, value
from standard
union all
select customer_id, start_date, value
from custom
union all
select s.customer_id, c.end_date + 1, s.value
from custom c join
standard s
on c.customer_id = s.customer_id
union all
select customer_id, end_date, NULL
from standard
) sc
where value is not NULL;
CUSTOMER_ID START_DATE END_DATE VALUE
0001 15-JAN-13 12.00.00 AM 01-FEB-13 12.00.00 AM 20
0001 01-FEB-13 12.00.00 AM 16-MAR-13 12.00.00 AM 10
0001 16-MAR-13 12.00.00 AM 01-JUL-13 12.00.00 AM 10
0001 01-JUL-13 12.00.00 AM 01-AUG-13 12.00.00 AM 30
0001 01-AUG-13 12.00.00 AM 10