6. 정리
LAG(x, n, d) 는 n행 앞, LEAD(x, n, d) 는 n행 뒤의 값을 돌려줍니다. 오프셋을 생략하면 1, 기본값을 생략하면 NULL 이고, 그룹의 첫 행·마지막 행에서 NULL 이 나옵니다. 프레임의 영향을 받지 않아 전월 대비, 직전 이벤트와의 간격, 상태 변화 탐지에 그대로 씁니다.
FIRST_VALUE·LAST_VALUE·NTH_VALUE 는 프레임의 영향을 받습니다. LAST_VALUE 를 프레임 없이 쓰면 자기 자신이 나오므로 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING 을 명시합니다.
LAG·LEAD·FIRST_VALUE·LAST_VALUE 는 Oracle 8i·Tibero, MySQL 8.0, MSSQL 2012 부터 지원하고, MSSQL 2008 이하는 셀프 조인으로 대체합니다. NTH_VALUE 는 Oracle 11gR2·MySQL 8.0 에 있고 MSSQL 에는 없으며, IGNORE NULLS 는 Oracle 과 MSSQL 2022 부터 지원하고 MySQL 은 미지원입니다.
상태 변화 행은 LAG(status) <> status, 연속 구간은 ROW_NUMBER 차이 기법으로 뽑습니다. 다음 레슨은 계층 쿼리(CONNECT BY, 재귀 CTE)로 조직도 같은 트리 구조를 조회하는 방법을 다룹니다. 순위 함수는 고급 01, 집계 함수와 프레임은 고급 02 를 참고하세요.