(Window Function) 중 하나로, 현재 행의 이전 또는 다음 행의 값을 가져오는 데 사용됩니다. 주로 시간 순서가 있는 데이터에서 이전 값이나 다음 값을 참조해야 할 때 유용합니다. 이 두 함수는 데이터를 시간적, 순차적으로 처리하거나 비교할 때 매우 강력합니다.
1) lag
LAG() 함수는 현재 행보다 이전 행의 값을 반환합니다. 기본적으로는 특정 열에서 이전 행의 데이터를 가져옵니다.
- 형태: LAG(expression, offset, default_value) OVER (PARTITION BY partition_column ORDER BY order_column)
- expression: 이전 행에서 가져올 열의 이름 또는 계산식
- offset: 몇 번째 이전 행을 가져올지 지정하는 값 (기본값은 1, 즉 바로 이전 행)
- default_value: 이전 행이 없을 때 반환할 기본 값 (옵션)
- PARTITION BY: 데이터를 그룹화할 기준 열 (옵션)
- ORDER BY: 순서대로 정렬할 기준 열
SELECT
employee_id,
salary,
LAG(salary, 1) OVER (ORDER BY month) AS previous_month_salary
FROM employees
ORDER BY month;
2) lead
LEAD() 함수는 현재 행보다 다음 행의 값을 반환합니다. LAG()와는 반대로, 다음 행에 대한 정보를 가져옵니다.
- 형태: LEAD(expression, offset, default_value) OVER (PARTITION BY partition_column ORDER BY order_column)
- expression: 이전 행에서 가져올 열의 이름 또는 계산식
- offset: 몇 번째 이전 행을 가져올지 지정하는 값 (기본값은 1, 즉 바로 다음 행)
- default_value: 이전 행이 없을 때 반환할 기본 값 (옵션)
- PARTITION BY: 데이터를 그룹화할 기준 열 (옵션)
- ORDER BY: 순서대로 정렬할 기준 열
select
employee_id,
salary,
lead(salary) over(order by month) as next_month_salary
from
employee
SELECT
month,
sales,
LAG(sales, 1) OVER (ORDER BY month) AS previous_sales,
LEAD(sales, 1) OVER (ORDER BY month) AS next_sales
FROM sales_data
ORDER BY month;