카드발급 내역(이력)에서 최종카드(현소지카드)와 최초카드번호를 1ROW로 결과를 표현 하고 싶습니다.
카드발급내역 | ||
발급일자 | 카드번호 | 이전카드번호 |
2015-10-20 | 10001 | |
2018-10-25 | 11001 | 10001 |
2020-09-25 | 12001 | 11001 |
현소지(최종발급)카드번호 | 최초발급카드번호 |
12001 | 10001 |
결과를 WITH recursive로 구현을 하고 싶습니다.또한, 카드발급 내역이 신규 발급,유효기간 도래 재 발급 , 분실, 기타 재발급으로 20회 이상 발급한 case도 있음.
프로시저로 되어있는 프로그램을 SQL로 변경 해 보고 싶습니다. 고수님들의 조언 부탁드립니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | WITH t AS ( SELECT '2015-10-20' dt, 10001 cd, null pcd FROM dual UNION ALL SELECT '2018-10-25' , 11001, 10001 FROM dual UNION ALL SELECT '2020-09-25' , 12001, 11001 FROM dual UNION ALL SELECT '2015-10-20' , 20001, null FROM dual UNION ALL SELECT '2018-10-25' , 21001, 20001 FROM dual UNION ALL SELECT '2020-09-25' , 22001, 21001 FROM dual ) SELECT cd , CONNECT_BY_ROOT(cd) root_cd FROM t WHERE CONNECT_BY_ISLEAF = 1 START WITH pcd IS NULL CONNECT BY PRIOR cd = pcd ; |