logweft.

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결과 비교

코드는 이 브라우저에 자동 저장돼요.

풀이 결과

코드를 작성하고 채점하기를 눌러보세요.

    학습용으로 제공된 조건을 확인해요. 알고리즘 사용 방식·설계 의도는 해설과 함께 비교해보세요.

    어떤 기록을 찾으세요?

    키워드를 입력하면 기록을 찾아드려요.