Data Scientist

[MSSQL] 이전행, 다음행 데이터 조회 LAG, LEAD 함수 본문

SQL

[MSSQL] 이전행, 다음행 데이터 조회 LAG, LEAD 함수

Cosmo-JH 2020. 8. 7. 15:39

먼저 SQL Server 2012 이상 에서 작동한다는 것을 참고하기 바란다.

LAG, LEAD 함수는 현재 조회되는 행의 이전행, 다음행의 데이터를 같은 행에서 조회할 수 있게 해주는 함수이다. 이전행과 다음행의 데이터를 가져오는 기준은 조회 되는 결과 값에 따라서 출력된다.

원본 데이터 셋

 
SELECT 	EMP_ID,
	EMP_SAL,
        MONTH_DT
        REG_DATE
FROM EMP_MAST
ORDER BY EMP_ID, MONTH_DT
 
  EMP_ID EMP_SAL MONTH_DT REG_DATE
1 A001 300 202001 2020-01-01 00:00:00.000
2 A001 400 202002 2020-02-01 00:00:00.000
3 A001 500 202003 2020-03-01 00:00:00.000
4 B002 200 202001 2020-01-01 00:00:00.000
5 B002 210 202002 2020-02-01 00:00:00.000
6 B002 220 202003 2020-03-01 00:00:00.000
7 C003 100 202001 2020-01-01 00:00:00.000
8 C003 150 202002 2020-02-01 00:00:00.000

 

LAG / LEAD 함수 활용

 
SELECT	EMP_ID,
	EMP_SAL,
    	MONTH_DT,
        LAG(EMP_SAL, 1, NULL) OVER(PARTITION BY EMP_ID ORDER BY MONTH_DT) AS PREV_EMP_SAL,
        LEAD(EMP_SAL, 1, NULL) OVER(PARTITION BY EMP_ID ORDER BY MONTH_DT) AS NEXT_EMP_SAL
FROM EMP_MAST
ORDER BY EMP_ID, MONTH_DT
 
  EMP_ID MONTH_DT EMP_SAL PREV_EMP_SAL NEXT_EMP_SAL
1 A001 202001 300 NULL 400
2 A001 202002 400 300 500
3 A001 202003 500 400 NULL
4 B002 202001 200 NULL 210
5 B002 202002 210 200 220
6 B002 202003 220 210 NULL
7 C003 202001 100 NULL 150
8 C003 202002 150 100 NULL

붉은색, 초록색, 보라색 끼리 그룹지어 데이터를 확인하면 된다.