问题描述:
A表为连续时间区间,B表为间断时间区间。每条数据描述某ID在Eff_Date到Exp_Date之间的number取值。
区间重合的数据,优先考虑B表的数据,要求合并A,B表为C查询表。
1.每天取一个快照,获得以天为粒度的快照表,再进行合并生成C表
2.请阅读SQL
select
id,number,
case when type = 1 and exp_lag>eff_date
then dateadd(day, 1, exp_lag )
else eff_date
end eff_date,
case when type = 1 and eff_lead < exp_date
then dateadd(day, -1, eff_lead)
else exp_date
end exp_date
from
(
select
id, number, eff_date, exp_date,
lead(eff_date) over(order by eff_date) eff_lead,
lag(exp_date) over(order by eff_date) exp_lag, type
from
(
select *, 1 type from A
union all
select