SQL-L4-009 / 고급 윈도
마지막 비NULL 값
고급문제
observations에서 각 id까지 마지막으로 등장한 NULL 아닌 value를 채워 id, value를 조회하세요. 앞선 유효값이 없으면 NULL입니다.
결과의 열 순서와 행 순서를 지키세요. 별칭 이름은 자유지만 열 개수와 값은 일치해야 합니다. SQLite 기준입니다.
입출력 예시
테이블과 예제 데이터
CREATE TABLE observations (id INTEGER, value TEXT); INSERT INTO observations VALUES (1,NULL),(2,'a'),(3,NULL),(4,'b'),(5,NULL);
첫 데이터의 기대 결과 · 행 순서대로
[
[
1,
null
],
[
2,
"a"
],
[
3,
"a"
],
[
4,
"b"
],
[
5,
"b"
]
]서로 다른 준비 데이터 2개에서 확인해요.
힌트
마지막 유효 행의 id를 누적 MAX로 찾으세요.
해설·정답 보기
값 자체의 MAX가 아닌 유효한 행 위치의 MAX를 구한 뒤 원본 값을 연결합니다.
WITH g AS(SELECT id,MAX(CASE WHEN value IS NOT NULL THEN id END) OVER(ORDER BY id ROWS UNBOUNDED PRECEDING) last_id FROM observations) SELECT g.id,o.value FROM g LEFT JOIN observations o ON o.id=g.last_id ORDER BY g.id;
query.sql결과 비교
코드는 이 브라우저에 자동 저장돼요.
풀이 결과
코드를 작성하고 채점하기를 눌러보세요.
학습용으로 제공된 조건을 확인해요. 알고리즘 사용 방식·설계 의도는 해설과 함께 비교해보세요.