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_id | log_date | course_name | progress_percent |
---|---|---|---|
1 | 2024-06-01 | SQL Basics | 40 |
1 | 2024-06-02 | SQL Basics | 60 |
1 | 2024-06-03 | SQL Basics | 80 |
1 | 2024-06-04 | SQL Basics | 100 |
사용자의 날짜별 진도를 확인하고, 이전날과 다음날의 값을 비교해 보겠습니다.
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_id | log_date | course_name | progress_percent | previous_progress | next_progress |
---|---|---|---|---|---|
1 | 2024-06-01 | SQL Basics | 40 | NULL | 60 |
1 | 2024-06-02 | SQL Basics | 60 | 40 | 80 |
1 | 2024-06-03 | SQL Basics | 80 | 60 | 100 |
1 | 2024-06-04 | SQL Basics | 100 | 80 | NULL |
활용 방법
LEAD()
: 다음 행의 값을 비교할 때 사용LAG()
: 이전 행과의 차이를 분석할 때 사용- 시계열 데이터, 로그, 매출 추이, 사용자 행동 패턴 분석 등에서 자주 활용
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!