기본적으로는 다음과 같다.
LEAD() - 다음값
LAG() - 이전값
* 사용법
- LAG(), LEAD() 함수 사용시 필수 입력사항 : OVER(ORDER BY )
- LAG(A, B, C) A:대상로우, B:가져와서 뿌져줄 시작로우(대상로우 이전값 출력됨, default:1), C:대상로우 이전값이 없는 경우 채울 값(default:Null)
- LEAD(A, B, C) A:대상로우, B:가져와서 뿌져줄 시작로우(대상로우 다음값 출력됨, default:1), C:대상로우 다음값이 없는 경우 채울 값(default:Null)
* 테스트를 해보자
with TestTable as
(
select 0 Cat from dual union all
select 1 Cat from dual union all
select 3 Cat from dual union all
select 6 Cat from dual union all
select 10 Cat from dual union all
)
select Cat
LAG(Cat, 1) over (order by cat) prev_value,
LEAD(Cat, 1) over (order by cat) next_value,
Cat - LAG(Cat, 1) over (order by cat) Gap_By_Prev_Value,
Cat - LEAD(Cat, 1) over (order by cat) Gap_By_Next_value
from TestTable;
-- result
CAT | PREV_VALUE | NEXT_VALUE | GAP_BY_PREV_VALUE | GAP_BY_NEXT_VALUE | |
1 | 0 | 1 | -1 | ||
2 | 1 | 0 | 3 | 1 | -2 |
3 | 3 | 1 | 6 | 2 | -3 |
4 | 6 | 3 | 10 | 3 | -4 |
5 | 10 | 6 | 4 |
=> Prev_value 와 Next_value 에서 Null값(빈칸)으로 표시된 부분들은 대상로우의 이전값 혹은 다음값이 없는 경우에 해당한다.
출처 : 극히일부자작 + http://www.jjimkorea.pe.kr/213 + http://blog.naver.com/with0utme?Redirect=Log&logNo=60151872512
'Database > Oracle' 카테고리의 다른 글
오라클 XMLAGG 함수 개요(펌) (0) | 2012.03.11 |
---|---|
Oracle - RANK(), DENSE_RANK(), ROW_NUMBER()의 차이 (0) | 2012.02.03 |
[펌] Oracle 페이징 처리하기 (0) | 2011.12.26 |
[펌] Oracle Client 설치 (0) | 2011.11.11 |
[펌] ORA-12514: TNS:listener does not currently know of service requested in connect descriptor (0) | 2011.11.02 |