안녕하세요.. 실력 정말없는 1인입니다.
이곳에서 자료를 찾아서 적용해봐도 도저히 안되서 도움 좀 청하고자 합니다.
현재 아래와 같은 식의 data가 들어있는데.. 담당자가 발령종료일을 계속해서 입력을 안한 상태입니다.
사번 | 발령일 | 발령시작일 | 발령종료일 |
15327 | 19870629 | 19870629 | |
15327 | 19940101 | 19940101 | |
22552 | 19871112 | 19871112 | |
22553 | 19940101 | 19940101 | |
22553 | 19960102 | 19960102 | |
92741 | 19871015 | 19871015 | |
92741 | 19940101 | 19940101 |
이를 update 하고자 하는데.. update하고자 하는 data의 모습은 아래와 같습니다.
사번 | 발령일 | 발령시작일 | 발령종료일 |
15327 | 19870629 | 19870629 | 19931231 |
15327 | 19940101 | 19940101 | |
22552 | 19871112 | 19871112 | 19931231 |
22553 | 19940101 | 19940101 | 19960101 |
22553 | 19960102 | 19960102 | |
92741 | 19871015 | 19871015 | 19931231 |
92741 | 19940101 | 19940101 |
발령종료일 컬럼을 update해야 되며 붉은색 Data로 업데이트를 해야합니다. 즉 마지막 발령시작일 바로 전날로 업데이트 해야 하며 빈칸은 발령시작일로부토 현재까지 동일 발령으로 계속 이어진다는 의미입니다. 2999/12/31로 해도 되구요..
이작업을 하려고 하는데.. 쿼리 좀 부탁드립니다.
MERGE INTO 테이블 a USING ( SELECT * FROM ( SELECT TO_CHAR(TO_DATE(LEAD(발령일) OVER (PARTITION BY 사번 ORDER BY 발령일), 'YYYYMMDD') - 1, 'YYYYMMDD') 발령종료일 FROM 테이블 ) WHERE 발령종료일 IS NOT NULL ) b ON (a.ROWID = b.ROWID) WHEN MATCHED THEN UPDATE SET a.발령종료일 = b.발령종료일
-- PK 가 있다면 ROWID 조건 대체하거나 추가해주세요.
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:53140678334596