학습 자료

LEAD와 LAG

LEAD()LAG()는 윈도 함수로, 현재 행을 기준으로 이전 또는 다음 행의 값을 가져오는 데 사용됩니다.

별도의 JOIN 없이도 인접 행과 비교할 수 있어 시계열 데이터, 변화 추적, 전후 값 비교 등에 유용합니다.

  • LEAD(): 다음 행의 값을 조회
  • LAG(): 이전 행의 값을 조회

문법

LEAD와 LAG 기본 문법
SELECT column, LAG(column) OVER (ORDER BY ...) AS previous_value, LEAD(column) OVER (ORDER BY ...) AS next_value FROM table;

기본값과 사용자 지정 오프셋을 줄 수도 있습니다.

사용자 지정 오프셋과 기본값 지정
LAG(column, offset, default_value) OVER (...)
  • offset: 몇 번째 이전/다음 행을 볼지 지정 (기본값 1)
  • default_value: 범위를 벗어날 때 반환할 값 (기본값 NULL)

예시: 학습 진도 비교

다음은 학습자의 강의 진도 데이터를 담은 테이블입니다.

user_idlog_datecourse_nameprogress_percent
12024-06-01SQL Basics40
12024-06-02SQL Basics60
12024-06-03SQL Basics80
12024-06-04SQL Basics100

사용자의 날짜별 진도를 확인하고, 이전날과 다음날의 값을 비교해 보겠습니다.

LEAD와 LAG 예시
SELECT user_id, log_date, course_name, progress_percent, LAG(progress_percent) OVER ( PARTITION BY user_id ORDER BY log_date ) AS previous_progress, LEAD(progress_percent) OVER ( PARTITION BY user_id ORDER BY log_date ) AS next_progress FROM course_progress;

결과

user_idlog_datecourse_nameprogress_percentprevious_progressnext_progress
12024-06-01SQL Basics40NULL60
12024-06-02SQL Basics604080
12024-06-03SQL Basics8060100
12024-06-04SQL Basics10080NULL

활용 방법

  • LEAD(): 다음 행의 값을 비교할 때 사용
  • LAG(): 이전 행과의 차이를 분석할 때 사용
  • 시계열 데이터, 로그, 매출 추이, 사용자 행동 패턴 분석 등에서 자주 활용
Quiz
0 / 1

SQL 윈도 함수에서 PARTITION BY 절의 주된 목적은 무엇인가요?

GROUP BY처럼 여러 행을 하나의 요약 행으로 축약하기 위해서.

특정 기준을 충족하지 않는 행을 걸러내기 위해서.

행들을 독립적으로 처리할 수 있도록 그룹으로 나누기 위해서.

공통 열을 기준으로 여러 테이블을 Join하기 위해서.

학습 자료

AI 튜터

디자인

업로드

수업 노트

즐겨찾기

도움말

코드 에디터

코드 실행
코드 생성

DB 테이블 구조

실행 결과