728x90
오라클 함수 중 이전 row나 이후 row의 값을 확인해야 하는 경우가 종종 있다.
이럴 때 쓰는 함수가 LAG(), LEAD() 함수들이다.
▶ LAG - 명시된 값을 기준으로 이전 로우의 값 반환
LAG(조건, 순서, 디폴트) OVER (PARTITION BY 절)
▶ LEAD - 명시된 값을 기준으로 이후 로우의 값 반환
LEAD(조건, 순서, 디폴트) OVER (PARTITION BY 절)
LAG(), LEAD() 예시 SQL문
SELECT ID
, AMT
, LAG(ID) OVER(ORDER BY ID) AS PREV_ID
, LEAD(ID) OVER(ORDER BY ID) AS NEXT_ID
, LEAD(ID,2,'ID없음') OVER(ORDER BY ID) AS T_NEXT_ID
FROM TEST_TABLE
>>> 결과
ID | AMT | PREV_ID | NEXT_ID | T_NEXT_ID |
test1 | 5000 | test2 | test3 | |
test2 | 6000 | test1 | test3 | test4 |
test3 | 7000 | test2 | test4 | ID없음 |
test4 | 8000 | test3 | ID없음 |
설명
- PREV_ID : LAG 함수 사용, 이전 로우의 ID값. 없을 경우는 NULL.
- NEXT_ID : LEAD 함수 사용, 이후 로우의 ID값. 없을 경우는 NULL.
- T_NEXT_ID : LEAD 함수 활용(조건절 사용), 순서 2번째부터 가져오고 defalut값으로 'ID없음'. NULL일 경우에는 'ID없음'으로 표시됨.
728x90
반응형
'DB > Oracle' 카테고리의 다른 글
[Oralce] ORA-01476: divisor is equal to zero - 제수가 0입니다. (1) | 2023.03.29 |
---|---|
[Oracle] PIVOT 함수 사용법 (행을 열로 변환) (0) | 2021.03.12 |
[Oracle] CASE문 - CASE WHEN 표현식 사용법 (0) | 2021.02.19 |
[Oracle] 순위 매기는 함수 RANK(), DENSE_RANK(), ROW_NUMBER() 비교 (0) | 2021.02.18 |
[Oracle] WITH절 사용법 (0) | 2021.02.18 |
댓글