본문 바로가기
Work/DataBase

[ORACLE] LAG, LEAG 를 통한 선행/후행 데이터 읽어오기

영어사전에서 다음 각함수의 뜻을 찾아보면 ,

LAG : 뒤에 처지다, 뒤떨어지다 -- 이전행의 데이터를 가져오는 함수

LEAD : 이끈다. 앞장서다  -- 후행 데이터를 가져오는 함수

 

사용법 - (컬럼명, 차이, 0 )

  LAG ( expr, offset, default ) OVER ( PARTITION BY 절 or ORDER BY 절)

 LEAD ( expr, offset, default ) OVER ( PARTITION BY 절 or ORDER BY 절) 

 

보통 합계나 COUNT와 같은 그룹함수식을 이용해 나온 수치에 이전 이후 값을 보이고싶을때 사용하므로

부분그룹화하는 PARTITION 과 같이쓰이며, 정렬되어있어야 원하는 값을 신뢰성있게 가져오기에 함께 사용한다

 

-- LAG / LEAD 를 이용하여 특정컬럼에 선/후 행 가져오기
select 기준년월
       ,to_char(sum(본인여신잔액), '999,999,999,999') as 당월매출 
       ,LAG(to_char(sum(본인여신잔액), '999,999,999,999'),1,0) OVER (ORDER BY 기준년월) 전월매출 -- 선행 데이터
       ,LEAD(to_char(sum(본인여신잔액), '999,999,999,999'),1,0) OVER (ORDER BY 기준년월) 다음월매출 -- 후행데이터
  from e_cust_mon_info 
 where 기준년월 like '%2014%' 
 group by 기준년월 
 order by 기준년월
;

질의결과가 조금 다를수있음