질문이라기 보다..설명좀 부탁드립니다 ^^;; 0 2 1,792

by 남성윤 [2008.05.29 21:09:51]


A_MON  A_OUT                 
------ ----------------------
200101 1900000               
200102 2000000               
200103 1500000               
200104 1100000               
200105 2100000               
200106 1600000               
200107 1400000               
200108 1700000               
200109 1900000               
200110 1000000               
200111 1700000               
200112 1300000    

select a_mon, a_out,
        sum( a_out ) over ( partition by to_char( to_date( a_mon , 'YYYYMM' ), 'Q' )
                            order by to_date( a_mon, 'YYYYMM' )
                            range interval '2' month preceding ) as c1
from a_tb  

  range interval '2' month preceding ) as c1 <-- 이부분이 무엇을 말하고 있는지 모르겠어요

 

by 마농 [2008.05.30 08:39:04]
위에 적으신 3줄이 한문장입니다. 분석함수구문에 대해 공부하셔야 합니다.
1. sum(a_out) over() : a_out 컬럼의 누적 합계
2. partition by : 누적합계를 내기 위한 구분(그룹), 여기서는 분기별 합계가 되겠네요
3. order by : 누적합계를 구하기위한 순서(정렬)
4. range : 누적합계를 구하기위한 범위, 여기서는 2달전부터 해당월까지 3달치가 되겠네요
여기서 지정한 범위는 partition by에서 지정한 그룹을 벗어나지 않으므로 굳이 않써도 되는 구문이군요.

by 남성윤 [2008.05.30 09:14:22]
답변 감사합니다~^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입