LAG(expr, n, default_value), LEAD(expr, n, default_value)
LAG()는 현재 로우의 바로 앞 로우의 값을, LEAD()는 현재 로우의 다음 로우의 값을 반환하는 함수입니다. 참고로 lag는 지연, lead는 선두란 뜻이죠. 두 함수는 3개의 매개변수가 있습니다. 첫 번째 매개변수인 expr은 값을 반환할 칼럼(표현식), n은 몇 번째 로우의 값을 가져오는지를 나타내는 숫자, default_value는 반환값이 NULL일 때 NULL을 대체하는 값입니다. 이때 n과 default_value는 생략할 수 있습니다. 생략하면 n은 1, default_value는 NULL이 적용됩니다.
두 함수 역시 예제로 작동 방식을 알아봅시다.
코드 11-15
SELECT employee_id, emp_name, dept_name, salary,
LAG(salary) OVER (PARTITION BY dept_name
ORDER BY salary DESC
) lag_previous,
LEAD(salary) OVER (PARTITION BY dept_name
ORDER BY salary DESC
) lead_next
FROM emp_hierarchy
ORDER BY 3, 4 DESC;
실행결과