지식정보

ORACLE LAG, LEAD 함수 활용하기

onggun 2017. 2. 15. 17:13

예를 들어 대출을 받은 고객의 대출상태 (정상, 연체)를 월별로 이력을 남겨놨다고 하자

고객의 대출상태가 변경된 월을 뽑고자 한다면 어떻게 해야 할까?

 

 

WITH  T (MM,ST)
AS (
SELECT '201601','1' FROM DUAL UNION ALL
SELECT '201602','1' FROM DUAL UNION ALL
SELECT '201603','1' FROM DUAL UNION ALL
SELECT '201604','2' FROM DUAL UNION ALL
SELECT '201605','2' FROM DUAL UNION ALL
SELECT '201606','1' FROM DUAL UNION ALL
SELECT '201607','2' FROM DUAL UNION ALL
SELECT '201608','2' FROM DUAL UNION ALL
SELECT '201609','1' FROM DUAL 
)
SELECT MM, ST
  FROM
    (
    SELECT MM, ST, LEAD(ST,1,'*') OVER(ORDER BY MM) NST 
     FROM T
    )
  WHERE ST!= NST


 

 

오라클의 LEAD 함수는 다음 레코드의 값을 가져올 때 사용하고 사용법은 다음과 같습니다.

 

LEAD(컬럼, 순서, 기본값) OVER ([PARTITION BY 그룹컬럼] ORDER BY 컬럼)

 

이전 레코드의 값과 비교하는 경우에는 LAG 함수를 사용하고 사용법은 동일합니다.