위치 참조

LAG/LEAD는 정렬된 파티션 안에서 오프셋을 읽는다

이전 행과 다음 행은 테이블의 저장 순서가 아니라 PARTITION BY로 나눈 묶음과 ORDER BY가 만든 위치에서 결정된다.

LAG가 읽는 이전 행
현재 행
LEAD가 읽는 다음 행
개발팀 partition ORDER BY hire_month
민준1월 입사
서연현재 행
도윤다음 행
지우4월 입사
← LAG(1) = 민준 현재 = 서연 LEAD(1) = 도윤 →
영업팀 partition 다른 부서 행은 보지 않는다
하린2월 입사
유나현재 행
준호다음 행
← LAG(1) = 하린 현재 = 유나 LEAD(1) = 준호 →
PARTITION BY 읽을 수 있는 범위를 먼저 끊는다
  • 부서별, 고객별, 상품별로 이전/다음 행을 따로 계산한다.
  • 파티션 밖의 행은 오프셋 후보가 아니다.
ORDER BY 이전/다음의 의미를 고정한다
  • 정렬 키가 중복되면 보조 키를 추가한다.
  • 최종 출력 순서는 바깥 ORDER BY가 따로 필요하다.
오프셋/기본값 범위를 벗어나면 기본값을 정한다
  • LAG(col, 2)는 두 행 전을 읽는다.
  • 없을 때는 NULL이거나 세 번째 인자로 지정한 값이 나온다.
현재 행 LAG(name) LEAD(name) 해석
서연 민준 도윤 개발팀 안의 바로 이전/다음
민준 NULL/기본값 서연 파티션 첫 행은 이전 행이 없다
준호 유나 NULL/기본값 파티션 마지막 행은 다음 행이 없다

LAG/LEAD는 윈도우 프레임의 누적 범위가 아니라 정렬된 행 위치를 읽는다. 그래서 파티션, 정렬 키, 오프셋, 기본값을 한 세트로 검토해야 한다.