삭제일자 가져오는 쿼리 질문 드립니다. 0 2 2,179

by zandi [SQL Query] [2012.09.18 22:39:59]


SELECT NVL( 
 (SELECT MAX(A.INDT)
 FROM TABLE1_HISTORY A, TABLE1 B, CODE_TABLE C
WHERE A.USERID = B.USERID
 AND A.STATUS = C.CODEID  
 AND A.USERID = (SELECT DISTINCT USERID FROM TABLE1 D WHERE D.USERID = '사용자ID' AND D.DELETED <> 0 )
 AND A.STATUS IN ('CODEA','CODEB','CODEC'))   
  ,(SELECT MAX(UPDT) FROM TABLE1 WHERE USERID ='사용자ID' AND DELETED <>0 )
) DELETE_DATE 
FROM DUAL 

조건1. TABLE1 에서 DELETED 가 0이 아닌 USERID를 가져와서 TABLE1_HISTORY 테이블에서 앞의 USERID 를 조건으로 MAX(INDT) 검색 
위의 값이 없으면 
TABLE1 에서 DELETED 가 0이 아닌 USERID를 가져와서 앞의 USERID 를 조건으로MAX(UPDT) 를 가져오는 조건
조건2. 반드시 DELETE_DATE 값은 있어야 합니다.(데이터는 있는 걸로 간주)

위의 조건으로 쿼리를 만들었는데 복잡해 보이기도 하고 더 좋은 방법은 없는지 궁금해서 질문드립니다.
by 마농 [2012.09.18 23:42:57]
SELECT NVL(
       MAX(CASE WHEN a.status IN ('CODEA','CODEB','CODEC') THEN a.indt END)
       , MAX(b.updt)
       ) delete_date
  FROM table1_history a
     , table1 b
 WHERE a.userid = b.userid
   AND b.userid = '사용자ID'
   AND b.deleted  0
;

by zandi [2012.09.19 10:58:16]
답변 감사합니다.
만들어주신 쿼리를 보면 "아~~!!" 라고 이해가 되는데
왜 혼자서 해보려면 잘 안되는지 모르겠네요.

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