안녕하세요. 테이블에 잘못들어간 값이 있어서 질문남겨드립니다.
codeNum, pCode1, pCode2 값이 같은 데이터중
처음 등록한 데이터(wrdt 컬림기준) 1개만 newYn컬럼에 Y값을 가질수 있습니다.
첨부파일에 보시면 마지막3개의 데이터가 Y값인데 원래 N값이 insert됐어야합니다.
(codeNum, pCode1, pCode2 값이같은 예시 하나만 캡쳐를 했습니다.)
해당테이블에 10만건정도 데이터가 있는데 아래2가지 경우를 실행할수 있는지 궁금합니다.
1. 처음에 등록한 데이터가 Y임에도 Y값을 가지고 있는 데이터 select
2. 처음에 등록한 데이터가 Y임에도 Y값을 가지고 있는 데이터를 N값으로 update
-- 1. 대상 그룹 조회 SELECT codeNum, pCode1, pCode2 , COUNT(CASE WHEN newYn = 'Y' THEN 1 END) cnt_y FROM t GROUP BY codeNum, pCode1, pCode2 HAVING COUNT(CASE WHEN newYn = 'Y' THEN 1 END) > 1 ; -- 2. 대상 조회 1 SELECT * FROM t m WHERE m.newYn = 'Y' AND EXISTS (SELECT 1 FROM t s WHERE s.codeNum = m.codeNum AND s.pCode1 = m.pCode1 AND s.pCode2 = m.pCode2 AND s.newYn = m.newYn AND s.wrdt < m.wrdt ) ; -- 2. 대상 조회 2 SELECT * FROM t m INNER JOIN (SELECT codeNum, pCode1, pCode2 , MIN(wrdt) wrdt FROM t WHERE newYn = 'Y' GROUP BY codeNum, pCode1, pCode2 ) s ON m.codeNum = s.codeNum AND m.pCode1 = s.pCode1 AND m.pCode2 = s.pCode2 AND m.wrdt > s.wrdt WHERE m.newYn = 'Y' ; -- 3. 대상 갱신 UPDATE t m INNER JOIN (SELECT codeNum, pCode1, pCode2 , MIN(wrdt) wrdt FROM t WHERE newYn = 'Y' GROUP BY codeNum, pCode1, pCode2 ) s ON m.codeNum = s.codeNum AND m.pCode1 = s.pCode1 AND m.pCode2 = s.pCode2 AND m.wrdt > s.wrdt SET m.newYn = 'N' WHERE m.newYn = 'Y' ;