헤르메스 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