안녕하세요, 지난 번 답변 주심에 다시한번 감사드립니다.
새로운 쿼리 질문 드립니다. 빈 cell 값을 과거 데이터로 채우고자 할 때 인데요, 테이블은 다음과 같습니다.
base_ymd | seq | key_id | id1 | id2 |
20200601 | 1 | 12345 | AAA | ZZZ |
20200602 | 1 | 12345 | ZZZ | |
20200603 | 1 | 12345 | BBB | ZZZ |
20200603 | 2 | 12345 | ZZZ | |
20200604 | 1 | 12345 | CCC | ZZZ |
20200605 | 1 | 12345 | CCC | |
20200601 | 1 | 54321 | YYY | XXX |
202006 | ... | ... |
key_id가 여러개 있는 테이블에, id1과 id2가 비어있는 경우가 존재합니다.
base_ymd와 seq 기준으로 과거데이터(seq는 작을 수록 과거)에 값이 존재한다는 전제 하에 다음 값이 null이면(2번째, 4번째 id1)
과거 id1값을 가지고 채우는 로직이 필요합니다. null은 2개 이상일 수도 있고, id2도 마찬가지입니다.
미리 감사드립니다.
WITH T(base_ymd, seq, key_id, id1, id2) AS ( SELECT '20200601', 1, 12345, 'AAA', 'ZZZ' FROM dual UNION ALL SELECT '20200602', 1, 12345, '', 'ZZZ' FROM dual UNION ALL SELECT '20200603', 1, 12345, 'BBB', 'ZZZ' FROM dual UNION ALL SELECT '20200603', 2, 12345, '', 'ZZZ' FROM dual UNION ALL SELECT '20200604', 1, 12345, 'CCC', 'ZZZ' FROM dual UNION ALL SELECT '20200605', 1, 12345, 'CCC', '' FROM dual UNION ALL SELECT '20200601', 1, 54321, 'YYY', 'XXX' FROM dual ) SELECT base_ymd, seq, key_id , LAST_VALUE(id1 ignore nulls) OVER(PARTITION BY key_id ORDER BY base_ymd, seq) AS id1 , LAST_VALUE(id2 ignore nulls) OVER(PARTITION BY key_id ORDER BY base_ymd, seq) AS id2 FROM T