해지카드외에 보유카드가 없이 1년이 지난 고객을 조회하는 쿼리작성 2

by 스피킹유 [SQL Query] [2023.09.04 00:58:49]


고객 카드종류 카드이력코드 기록일시 해제일시 비고
A 카드A 01 20160730 20160827 카드제작
A 카드A 02 20160822 20160825 카드전달
A 카드A 00 20200530   장기휴면으로 인한 해지
A 카드B 01 20230416 20230424 카드제작
A 카드B 02 20230424   카드전달
A 카드B 03 20230804   카드교체
B 카드A 01 20230805   카드제작
B 카드A 01 20230901   카드전달
C 카드A 00 20210801   장기휴면으로 인한 해지

 

조회대상 :  카드이력코드 ='00' 이면서 기록일시가 현재 SYSDATE기준으로 1년이 경과하였고 1년안에 해제일시가 없으며, ---(1)

               해지되지 않은 다른 카드를 보유하고 있지 않는 고객과 카드종류를 조회하시오. 

 

 (1) 해지된 카드 조건입니다.

 위의 예시데이터에서 A고객은 해지카드를 보유하고 있으나 다른 유효카드가 있으므로 조회되면 안됩니다.

  해지된 카드를 보유하고 있고 1년이 넘은 고객은 C이며 보유카드는 카드 A ---> 정답으로서 C고객과 카드A만 조회되도록 하는 SQL을 구하고 싶습니다.

 

 위의 내용을 구하는 오라클 SQL을 알려주시면 감사하겠습니다.

 

 

by 마농 [2023.09.04 03:13:15]
WITH t AS
(
SELECT 'A' id, '카드A' cd, '01' st, '20160730' sdt, '20160827' edt, '카드제작' cmt    FROM dual
UNION ALL SELECT 'A', '카드A', '02', '20160822', '20160825', '카드전달'               FROM dual
UNION ALL SELECT 'A', '카드A', '00', '20200530', ''        , '장기휴면으로 인한 해지' FROM dual
UNION ALL SELECT 'A', '카드B', '01', '20230416', '20230424', '카드제작'               FROM dual
UNION ALL SELECT 'A', '카드B', '02', '20230424', ''        , '카드전달'               FROM dual
UNION ALL SELECT 'A', '카드B', '03', '20230804', ''        , '카드교체'               FROM dual
UNION ALL SELECT 'B', '카드A', '01', '20230805', ''        , '카드제작'               FROM dual
UNION ALL SELECT 'B', '카드A', '01', '20230901', ''        , '카드전달'               FROM dual
UNION ALL SELECT 'C', '카드A', '00', '20210801', ''        , '장기휴면으로 인한 해지' FROM dual
)
SELECT *
  FROM (SELECT id
             , cd
             , MAX(st) KEEP(DENSE_RANK LAST ORDER BY sdt) st
             , MAX(sdt) sdt
             , MAX(
               CASE WHEN MAX(st) KEEP(DENSE_RANK LAST ORDER BY sdt) = '00'
                     AND MAX(sdt) < TO_CHAR(ADD_MONTHS(sysdate, -12), 'yyyymmdd')
                    THEN 1 ELSE 2 END
               ) OVER(PARTITION BY id) flag
          FROM t
         GROUP BY id, cd
        )
 WHERE flag = 1
;

 


by 스피킹유 [2023.09.04 10:52:29]

안녕하세요. 이렇게 빨리 답변주시니

정말 감사드립니다. 

내용 확인해보겠습니다. 

좋은 하루되세요

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