拉链表
可以保存历史数据的表(保存每一条数据的生命周期)
a 100 2022-01-01 b 100 2022-01-01 a 200 2022-01-02 开链闭链a 100 2022-01-01 2022-01-02a 200 2022-01-02 9999-12-31b 100 2022-01-01 9999-12-31 某条数据开链日期 要作为 上一条数据的闭链日期 CREATE TABLE SRC( ID VARCHAR2(20), YE NUMBER(20,2), DT DATE);INSERT INTO SRC SELECT 'A',100,DATE '2022-01-01' FROM DUAL UNION ALL SELECT 'B',100,DATE '2022-01-01' FROM DUAL;SELECT * FROM SRC;INSERT INTO SRC SELECT 'A',200,DATE '2022-01-02' FROM DUAL;CREATE TABLE ZL AS SELECT * FROM SRC WHERE 1 = 0;INSERT INTO ZL SELECT * FROM SRC WHERE DT = DATE '2022-01-02';SELECT * FROM ZL;CREATE TABLE LLB AS SELECT SRC.*,DATE '9999-12-31' ET FROM SRC;SELECT * FROM LLB;SELECT LLB.ID ,LLB.YE ,LLB.DT ,(CASE WHEN ZL.DT > LLB.DT THEN ZL.DT ELSE TO_DATE('99991231','YYYYMMDD') END) FROM LLB LEFT JOIN ZL ON LLB.ID = ZL.IDCREATE TABLE JCB2 AS SELECT LLB.ID ,LLB.YE ,LLB.DT ,(CASE WHEN ZL.DT > LLB.DT THEN ZL.DT ELSE TO_DATE('99991231','YYYYMMDD') END) ET FROM LLB LEFT JOIN ZL ON LLB.ID = ZL.IDSELECT * FROM JCB2 ORDER BY DT;SELECT * FROM JCB2 WHERE DT <= DATE '2022-01-02' AND ET > DATE '2022-01-02'