两个拉链表时间区间覆盖合并问题

问题描述:

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 
		
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值