• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
桐&露
帮助1

拉链表
------------------------------------
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
系列文章
更多 icon
同类精品
更多 icon
继续加载