0Pricing
SQL Academy · 강의

LAG, LEAD와 시계열 패턴

LAG와 LEAD로 각 행을 이전 또는 다음 행과 비교하고 기간별 변화를 만듭니다.

LAG, LEAD와 시계열 패턴은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

LAG와 LEAD: 앞뒤 행 살펴보기

이 함수들은 윈도에서 인접한 행에 접근합니다.

  • LAG(col, n, default) — 현재 행보다 n개 앞선 행의 값
  • LEAD(col, n, default) — 현재 행보다 n개 뒤인 행의 값

이전 행

같은 사용자의 각 주문을 이전 주문과 비교합니다.

SELECT id, user_id, created_at, total,
       LAG(total) OVER (
         PARTITION BY user_id ORDER BY created_at
       ) AS prev_total
FROM orders;

전일 대비 변화량

이전 날짜와의 차이입니다.

SELECT day, revenue,
       revenue - LAG(revenue) OVER (ORDER BY day) AS delta
FROM daily_revenue
ORDER BY day;

전년 동월 대비

월별 시계열에서 오프셋 12를 사용하는 LAG입니다.

SELECT month, revenue,
       LAG(revenue, 12) OVER (ORDER BY month) AS prev_year_revenue,
       revenue / NULLIF(LAG(revenue, 12) OVER (ORDER BY month), 0) - 1 AS yoy
FROM monthly_revenue;

누락 구간 찾기

데이터가 누락된 날짜를 찾습니다.

WITH d AS (
  SELECT day, LAG(day) OVER (ORDER BY day) AS prev_day FROM daily_signups
)
SELECT day, prev_day, day - prev_day AS gap_days
FROM d
WHERE day - prev_day > 1;

세션화

간격이 임계값을 초과하면 행을 세션으로 묶습니다.

WITH gaps AS (
  SELECT user_id, ts,
         CASE WHEN ts - LAG(ts) OVER (PARTITION BY user_id ORDER BY ts)
                 > INTERVAL '30 min'
              THEN 1 ELSE 0 END AS new_session
  FROM events
)
SELECT user_id, ts,
       SUM(new_session) OVER (PARTITION BY user_id ORDER BY ts) AS session_id
FROM gaps;

그룹의 첫 값과 마지막 값

FIRST_VALUE와 LAST_VALUE는 윈도의 경계값을 가져옵니다.

SELECT id, total,
       FIRST_VALUE(total) OVER (PARTITION BY user_id ORDER BY created_at) AS first_order,
       LAST_VALUE(total)  OVER (PARTITION BY user_id ORDER BY created_at
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_order
FROM orders;
-- LAST_VALUE needs the explicit frame, otherwise default frame ends at current row.

NTH_VALUE

파티션에서 N번째 값을 선택합니다.

SELECT id,
       NTH_VALUE(total, 2) OVER (
         PARTITION BY user_id ORDER BY total DESC
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
       ) AS second_largest
FROM orders;

시계열의 기본값

LAG의 세 번째 인수는 이전 행이 없을 때 사용할 기본값입니다.

SELECT day, revenue,
       revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;
-- delta on first day = revenue itself (vs NULL)

셀프 조인으로 동일하게 표현하기

LAG를 셀프 조인으로 작성할 수도 있지만 더 느리고 복잡합니다. 항상 윈도 함수를 우선 사용하세요.

성능

윈도 함수는 파티션을 한 번 순회합니다. 병목은 정렬이므로 가능한 경우 ORDER BY 열에 인덱스를 생성하세요.

요약

LAG와 LEAD를 사용하면 행과 행을 비교할 수 있습니다.

  • 파티션 안의 이전 행과 다음 행
  • 변화량, 기간별 비교, 세션화
  • 경계값에는 FIRST_VALUE/LAST_VALUE

빠른 확인

전일 대비 매출 변화를 계산하려면 어떤 윈도 함수를 사용해야 하나요?

자주 묻는 질문

“LAG, LEAD와 시계열 패턴” 강의는 무료인가요?

네 — “LAG, LEAD와 시계열 패턴” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“LAG, LEAD와 시계열 패턴”에서 뭘 배우나요?

LAG와 LEAD로 각 행을 이전 또는 다음 행과 비교하고 기간별 변화를 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“LAG, LEAD와 시계열 패턴” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD와 시계열 패턴
  4. 누적 합계와 이동 평균
← SQL Academy(으)로 돌아가기