拉链表的算法原理和使用 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';
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhhhjab
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22