当前位置:   article > 正文

拉链表的算法原理和使用 SQL语句_拉链表sql语句写法

拉链表sql语句写法

拉链表
------------------------------------
SRC元数据表
TAG拉链表
T_NEW用于存放转换、处理后的数据
T_INC用于存放比对出的增量数据
'29991231'即未结束的(或称未关链的)
------------------------------------

-----------
算法详解
-----------
1.处理接收的数据,并添加【开始时间】【结束时间】
CREATE TABLE T_NEW AS SELECT * FROM TAG WHERE 1 = 0;
--创建临时表,复刻拉链表的表结构(这里非临时表)
INSERT INTO T_NEW(ID,NAME,BAL,START_DT,END_DT)
SELECT ID,NAME,BAL,'2014-01-04','2999-12-31'
  FROM SRC;
--从SRC中获取新数据,并添加【开始时间】【结束时间】

2.  存放经过对比的增量数据
CREATE TABLE T_INC AS SELECT * FROM TAG WHERE 1 = 0;
--同上
INSERT INTO T_INC(ID,NAME,BAL,START_DT,END_DT)
SELECT ID,NAME,BAL,START_DT,END_DT
  FROM V_NEW
 WHERE (ID,NAME,BAL) NOT IN (
           SELECT    ID,NAME,BAL 
             FROM    TAG 
            WHERE    END_DT = '29991231');
--插入数据到VT_INC表中
--筛选:防止出现重复数据(三信息字段没有和未结束名单中完全相同的)
--      (相同则说明重复了,没改变则不需要修改拉链表,则不用存储进VT_INC表)

3.如果ID已经存在————修改,不存在则不改
UPDATE TAG
   SET END_DT = '2014-01-04'
 WHERE END_DT = '2999-12-31' AND ID IN (SELECT ID FROM T_INC);
--修改结束日期为'2014-01-04' (判定为结束了) 
--修改筛选:
--    TAG中属于未结束的
--   且
--   ID在VT_INC中的(要不TAG中所有数据全在'2014-01-04'结束了)
4.添加新的状态
INSERT INTO TAR(ID,NAME,BAL,START_DT,END_DT)
SELECT ID,NAME,BAL,START_DT,END_DT
  FROM T_INC;

------------
使用
------------
1.查询所有的有效数据
SELECT * FROM TAG WHERE END_DT = '2999-12-31'
2.查询2022.10.06的历史记录
SELECT * 
  FROM TAG 
 WHERE START_DT <= '2022-10-06'
   AND END_DT >= '2022-10-06';

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号