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 |
붉은색, 초록색, 보라색 끼리 그룹지어 데이터를 확인하면 된다.