내일배움캠프/SQL

[SQL]LAG(), LEAD()함수 _현재 행의 이전 행의 값 참조하기

dydatablog 2025. 2. 10. 10:23
  • LAG() 함수 :  현재 행의 이전 행 값을 가져온다.
  • LEAD() 함수 : 현재 행의 다음 행 값을 가져온다.

SELECT절에서 주로 사용되며, 서브쿼리나 CTE(Common Table Expression) 내에서 사용할 수 있다.

🔺WHERE 절이나 ORDER BY 절에서 사용할 수는 없음!

LAG() 함수

기본 구문

LAG(column_name, offset, default_value) OVER (PARTITION BY ... ORDER BY ...)

 

  • column_name: 참조할 열.
  • offset: 이전 행의 수 (기본값은 1).
  • default_value: 이전 행이 없을 때 반환할 기본값 (기본값은 NULL).

예시

SELECT 
    id, 
    temperature, 
    LAG(temperature) OVER (ORDER BY recordDate) AS previous_temp
FROM Weather;


#output
| id | recordDate | temperature | temp2 |
| -- | ---------- | ----------- | ----- |
| 1  | 2015-01-01 | 10          | null  |
| 2  | 2015-01-02 | 25          | 10    |
| 3  | 2015-01-03 | 20          | 25    |
| 4  | 2015-01-04 | 30          | 20    |

 

 

LEAD() 함수

기본 구문

LEAD(column_name, offset, default_value) OVER (PARTITION BY ... ORDER BY ...)

 

  • column_name: 참조할 열.
  • offset: 다음 행의 수 (기본값은 1).
  • default_value: 다음 행이 없을 때 반환할 기본값 (기본값은 NULL).

 

예시

SELECT 
    id, 
    temperature, 
    LEAD(temperature) OVER (ORDER BY recordDate) AS next_temp
FROM Weather;


#output
| id | temperature | next_temp |
| -- | ----------- | --------- |
| 1  | 10          | 25        |
| 2  | 25          | 20        |
| 3  | 20          | 30        |
| 4  | 30          | null      |