본문으로 건너뛰기
실습하기

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(): 이전 행과의 차이를 분석할 때 사용
  • 시계열 데이터, 로그, 매출 추이, 사용자 행동 패턴 분석 등에서 자주 활용

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!