拉链表指的是,把一个事物在历史上的所有有效状态,在一个表中用最少行表述清楚。通常包含事物X、有效开始时间、有效结束时间、状态更新时间。
这样的表通常都在DW逻辑处理层。
当我们需要产出报表层的时候,我们通常就需要把这种大信息量的表,读取成更易读的形式,比如我们转化成每月一版的数据,以更便捷地支持各种业务需求。
企业常用方案,是利用SQL内置循环,对所需月进行逐月写数。具体代码如下:
Declare @i int --@i是一个负数,用于标定更新的月份数,比如-12,就是需要更新近1年的数据
Declare @Date date --@Date是一个日期变量,用于存放指定日期
While @i < 0 --SQL循环开始
Begin
Set @Date = --利用@i拿到标定更新月份的指定日期
insert into B表
Select 字段a,字段b
From ( -拿到符合指定日期有效的数据并插入
Select * From A表 where StartDate<=@Date and EndDate>@Date
) a
Set @i=@i+1 --该月数据已更新,循环进入下一个月的写入
End