최초카드번호 조회 0 5 1,793

by 구사일생 [SQL Query] with recursive [2020.10.25 20:29:34]


카드발급 내역(이력)에서 최종카드(현소지카드)와 최초카드번호를 1ROW로 결과를 표현 하고 싶습니다.

 

카드발급내역
발급일자 카드번호 이전카드번호
2015-10-20 10001  
2018-10-25 11001 10001
2020-09-25 12001 11001

 

현소지(최종발급)카드번호 최초발급카드번호
12001 10001

 

결과를 WITH recursive로 구현을 하고 싶습니다.또한,  카드발급 내역이 신규 발급,유효기간 도래  재 발급 , 분실, 기타 재발급으로 20회 이상 발급한 case도 있음.

프로시저로 되어있는 프로그램을 SQL로 변경 해 보고 싶습니다. 고수님들의 조언 부탁드립니다.

by 우리집아찌 [2020.10.25 22:58:14]

dbms 종류를 알려주세요.

혹시 컬럼에 카드번호 말고 다른 키(id,사번)가 있으면 더욱 쉬울것 같네요.


by 구사일생 [2020.10.26 22:15:53]

오라클 11g 입니다. 퇴근하고 이제와 봤네요

그리고 카드 발급테이블에는 카드번호와 발급일자,그리고 발행 순번 인데 하루에 같은사람에 여러번 발급을 하는 경우는

거의 없기 때문에 업무적으로 키는 카드번호와 발급일자 입니다.


by 마농 [2020.10.27 09:46:36]
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
;

 


by 마농 [2020.10.27 10:06:31]

전체 조회 쿼리입니다.
조회 조건이 주어진다면? 다르게 구현해야 할 수 도 있습니다.
예) 특정 고객ID 로 조회 / 특정 카드번호(현소지)로 조회 등


by 구사일생 [2020.10.28 21:45:25]

마농님 올려주신걸로 활용해 처리 하였습니다.

감사합니다.

지난번 거치기간 원리금 처리 건과 같이 잘 배워갑니다. 다시 한번 고맙다는 말씀 전 합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입