问题描述:
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
a.id, a.number, dateadd(day, 1, b.eff_date), a.exp_date, 1
from A a join B b o

该博客探讨了一个关于时间区间处理的问题,涉及到两个拉链表——A表(连续时间区间)和B表(间断时间区间)的合并。在区间重合的情况下,优先保留B表的数据。博主提出先将每天的数据转化为快照表,然后合并生成最终的C表。目前存在一个问题,需要解决如何修改SQL来适应特定场景。
最低0.47元/天 解锁文章
1900

被折叠的 条评论
为什么被折叠?



