IT/postgresDB

PostgreSQL LAG 함수

generator 2025. 6. 18. 22:30

PostgreSQL에서 LAG() 함수는 시계열 데이터 분석이나 백테스트 전략에서 전일 혹은 이전 시점의 데이터를 가져올 때 매우 유용한 함수입니다.
이 글에서는 LAG() 함수의 개념부터 실전 예제까지 단계별로 소개합니다.


LAG 함수란?

LAG(expr, offset, default)는 윈도우 함수 중 하나로,
현재 행보다 N행 이전의 값을 가져오는 함수입니다.

기본 문법:

LAG(컬럼명 [, 간격] [, 기본값]) OVER (PARTITION BY ... ORDER BY ...)
  • 컬럼명: 이전 값을 가져올 대상 컬럼
  • 간격: 몇 행 이전 값을 가져올지 (기본: 1)
  • 기본값: 이전 값이 없을 경우 사용할 기본값 (생략 가능)
  • PARTITION BY: 그룹 기준 (예: 종목별)
  • ORDER BY: 시계열 정렬 기준 (예: 날짜 오름차순)

실전 예제

SELECT
    stock_code,
    stock_date,
    close_price,
    LAG(close_price) OVER (PARTITION BY stock_code ORDER BY stock_date) AS prev_close,
    (close_price - LAG(close_price) OVER (PARTITION BY stock_code ORDER BY stock_date)) / 
        LAG(close_price) OVER (PARTITION BY stock_code ORDER BY stock_date) AS daily_return
FROM stock.stock_daily;
  • LAG(close_price) → 전일 종가
  • 이를 이용해 daily_return 계산

 왜 중요한가?

용도설명

수익률 계산 전일 종가와 오늘 종가 비교
변동성 분석 이동 평균 대비 변화율
시계열 모델 과거 값 기반의 전략 수립
머신러닝 피처 lag_1, lag_5, lag_20 형태로 활용

⚠️ 주의사항

  • ORDER BY가 없으면 LAG는 무의미합니다.
  • 첫 행은 이전 값이 없기 때문에 NULL이 반환됩니다.
  • 여러 번 LAG() 호출 시 계산 비용이 증가하므로 필요한 값만 최소 호출이 좋습니다.

정리

LAG() 함수는 단순해 보이지만, 시계열 데이터에서는 필수적인 기능입니다.
특히 금융 백테스트, 시계열 예측, 전략 리포트를 구성할 때 매우 강력한 도구가 되니 꼭 익혀두시기 바랍니다.


이 글이 도움이 되셨다면, PostgreSQL 윈도우 함수 시리즈의 다른 글도 확인해보세요!