학습 자료

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 테이블 구조

실행 결과