헤르메스 LIFE

[Oracle] LAG, LEAD - 이전, 이후 비교함수, 합계 본문

Database

[Oracle] LAG, LEAD - 이전, 이후 비교함수, 합계

헤르메스의날개 2015. 10. 2. 10:26
728x90

출처 : http://wintness.tistory.com/76



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

)

SELECT CAT,

      NVL(LAG(CAT, 1) OVER (ORDER BY CAT), 0)  PREV_VALUE,

      NVL(LEAD(CAT, 1) OVER (ORDER BY CAT), 0)  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,

      SUM(CAT) OVER (ORDER BY CAT)  NEXT_SUB_SUM

FROM TESTTABLE

;



=> Prev_value 와 Next_value 에서 Null값(빈칸)으로 표시된 부분들은 대상로우의 이전값 혹은 다음값이 없는 경우에 해당한다.


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

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)



728x90

'Database' 카테고리의 다른 글

[Oracle] TRUNC, ROUND 차이  (0) 2015.10.02
[Oracle] PL/SQL 예제  (0) 2015.10.02
[Oracle] PL/SQL PREDEFINED EXCEPTION - 미리정의된 예약  (0) 2015.09.30
[Oracle] PL/SQL 예외처리  (0) 2015.09.30
[Oracle] Procedure 예제  (0) 2015.09.30