我在 Teradata 中有一个表,由以下五个主要列组成:
Old New Type_of_Old Type_of_New Change_Dt
----------------------------------------------------
A B 0 1 Date 1
B C 1 1 Date 2
C D 1 0 Date 3
D B 0 1 Date 4
B E 1 1 Date 5
我想绑定从 type_of_old = 0 的第一个元素开始的旧值 - 新值,并在到达最后一个 type_of_old = 1 时切断边界。最后我想要这个数据:
Fırst Next Change Dt
-------------------------------
A B Date 1
A C Date 2
A D Date 3
D B Date 4
D E Date 5
问题是,元素 B 在不同的更改日期是 A 和 D 的下一个元素。因此,当我使用 WITH RECURSIVE 脚本时,它会绑定 B 的下一个元素,以及 A 和 D 的起始元素。
到目前为止,我编写了这个脚本,但是当它达到 type_of_old = 1 时我无法切断界限
CREATE MULTISET TABLE TEST.TABLE_A ( OLD_ELM VARCHAR(1), NEW_ELM VARCHAR(1),
TYPE_OF_OLD BYTEINT , TYPE_OF_NEW BYTEINT, CHANGE_DT DATE)
INSERT INTO TEST.TABLE_A ('A','B',0, 1, DATE '2018-01-01');
INSERT INTO TEST.TABLE_A ('B','C',1, 1, DATE '2018-02-01');
INSERT INTO TEST.TABLE_A ('C','D',1, 0, DATE '2018-03-01');
INSERT INTO TEST.TABLE_A ('D','B',0, 1, DATE '2018-04-01');
INSERT INTO TEST.TABLE_A ('B','E',1, 1, DATE '2018-05-01');
WITH RECURSIVE ELEMENT_PATH ( FIRST_ELM, NEXT_ELM, CHANGE_DT ) AS
( SELECT OLD_ELM, NEW_ELM, CHANGE_DT
FROM TEST.TABLE_A
WHERE TYPE_OF_OLD = 0
AND TYPE_OF_NEW = 1
UNION ALL
SELECT P.FIRST_ELM, A.NEW_ELM, A.CHANGE_DT
FROM ELEMENT_PATH P
JOIN TEST.TABLE_A A ON A.OLD_ELM = P.NEXT_ELM
WHERE A.CHANGE_DT > P.CHANGE_DT)
SELECT * FROM ELEMENT_PATH
该脚本的数据如下:
FIRST_ELM NEXT_ELM CHANGE_DT
A B 01.01.2018
A C 01.02.2018
A D 01.03.2018
D B 01.04.2018
D E 01.05.2018
A B 01.04.2018 (Wrong)
A E 01.05.2018 (Wrong)
A E 01.05.2018 (Wrong)
我该如何解决?
提前致谢,
问候