表A,用来记录某几个字段变更日志,例:日期 原值 目标值
2010-1-1 XXX YYY
2010-5-1 YYY ZZZ
2010-1-1 AAA BBB其中第1,2行是经过两次转换的,有什么语句可以得到如下的结果:原值 目标值
XXX ZZZ
AAA BBB即说明,现在的ZZZ最早是从XXX转换而来的。
2010-1-1 XXX YYY
2010-5-1 YYY ZZZ
2010-1-1 AAA BBB其中第1,2行是经过两次转换的,有什么语句可以得到如下的结果:原值 目标值
XXX ZZZ
AAA BBB即说明,现在的ZZZ最早是从XXX转换而来的。
...
start with
conect by..你自己搜搜看,我想不用过程可以搞定
table b where b.new=a.old) where connect_by_isleaf=1
connect by prior a.new=a.old
楼上快哦WITH a AS(
SELECT '2010-1-1' rq,'XXX' yz,'YYY' mbz FROM dual
UNION ALL
SELECT '2010-5-1' ,'YYY' ,'ZZZ' FROM dual
UNION ALL
SELECT '2010-1-1' ,'AAA' ,'BBB' FROM dual
)
SELECT CONNECT_BY_ROOT(yz),mbz FROM a
WHERE CONNECT_by_isleaf=1
START with NOT EXISTS(select 1 from a b where b.mbz=a.yz)
CONNECT BY PRIOR mbz=yz
table b where b.new=a.old) where connect_by_isleaf=1
connect by nocycle prior a.new=a.old