ANALYTIC 함수로, SELF JOIN 하지 않고 하나의 테이블에서 동시에 한 행(ROW) 이상을 접근 할 수 있다
이렇게 말로 써 놓으니 잘 모르겠군...
[형식]
LEAD(VALUE_EXPR[,OFFSET][,DEFAULT]) OVER([QUERRY_PARTITION_CLAUSE] ORDER_BY_CLAUSE)
예제 :
==================================================================================================
SELECT CLASSID, AVGPOINTS,
LAG(AVGPOINTS, 1) OVER (ORDER BY CLASSID) PREVAVG,
LEAD(AVGPOINTS, 1) OVER (ORDER BY CLASSID) NEXTAVG
FROM (
SELECT '2-1' CLASSID , 98.3 AVGPOINTS FROM DUAL UNION ALL
SELECT '2-2' CLASSID , 72.5 AVGPOINTS FROM DUAL UNION ALL
SELECT '2-3' CLASSID , 58.9 AVGPOINTS FROM DUAL UNION ALL
SELECT '2-4' CLASSID , 88.2 AVGPOINTS FROM DUAL
)
==================================================================================================
-------------결과 ------------------
CLASSID AVGPOINTS PREVAVG NEXTAVG
2-1 98.3 72.5
2-2 72.5 98.3 58.9
2-3 58.9 72.5 88.2
2-4 88.2 58.9
LAG(AVGPOINTS, 1) OVER (ORDER BY CLASSID) PREVAVG
//커서를 뒤로 이동하여 조회하고자 하는 값 AVGPOINTS, 이동되는 수 1, 정렬기준 CLASSID
LEAD(AVGPOINTS, 1) OVER (ORDER BY CLASSID) NEXTAVG
//커서를 앞으로 이동하여 조회하고자 하는 값 AVGPOINTS, 이동되는 수 1, 정렬기준 CLASSID
[출처] 오라클 분석함수 LAG() & LEAD()|작성자 웁스
http://blog.naver.com/bilang?Redirect=Log&logNo=110032829240
응용 예제 : 숫자중에 중간에 빠진 숫자를 찾기 위한 응용 예제
==================================================================================================
SELECT *
FROM (
SELECT LEAD(NUM,1,0) OVER(ORDER BY NUM) AS LNUM,
NUM , LEAD(NUM,1,0) OVER(ORDER BY NUM) - NUM AS TOT
FROM (
SELECT TO_CHAR(USESEQ,'00000') AS NUM FROM INF.RNDBANKSEND
ORDER BY 1
)
)
WHERE TOT > 1
ORDER BY NUM DESC ;
==================================================================================================
-------------결과 ------------------
LNUM NUM TOT
0 54218 -54218
54218 54217 1
54217 54216 1
54216 54215 1
54215 54214 1
54214 54213 1
54213 54212 1
54212 54211 1
아래 좀 더 자세한 예를 봐보자.