Database/Oracle2012. 2. 3. 10:47


기본적으로는 다음과 같다.

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

  
Posted by 아로나