윈도우 함수중급

LAG / LEAD

윈도우 내 직전/다음 N번째 행의 값을 가져오는 함수

정의

LAG(컬럼, offset, default) OVER (PARTITION BY ... ORDER BY ...)는 ORDER BY 기준 현재 행에서 offset만큼 앞쪽 행의 값을 반환한다. 첫 행에는 앞 행이 없으므로 default(미지정 시 NULL)를 반환한다. LEAD는 반대 방향(다음 행). 시계열 데이터에서 직전 값과의 차이 계산에 표준이다.

왜 중요한가?

서브쿼리나 SELF JOIN으로 "직전 값" 을 가져오던 코드를 한 줄로 대체. 일자별 매출 증감, 직전 로그 시각과의 간격 등 시계열 분석에 필수.

틀리기 쉬운 포인트

  • !첫 행/마지막 행은 default가 없으면 NULL을 반환합니다.
  • !PARTITION BY를 잊으면 그룹 경계를 넘어 값을 가져옵니다.
  • !ORDER BY 컬럼이 정렬되지 않으면 의미 없는 값이 나옵니다.

예시

SELECT order_date, amount, LAG(amount, 1) OVER (ORDER BY order_date) AS prev_amount, amount - LAG(amount, 1) OVER (ORDER BY order_date) AS diff
FROM daily_sales;

성능 포인트

!전후 행 접근은 정렬된 윈도우 위에서 O(1)에 가까워 SELF JOIN보다 훨씬 효율적.

관련 개념

관련 카테고리