sum() over(partition by )관련 질문입니다. 1 3 1,171

by 정민호 [Oracle 기초] [2019.04.10 10:20:48]


안녕하세요. 

 

201801   1000

201802   2000

201803   1000

201804   2000

201805   1000

 

 

위와 같이 데이터가 있으면 

 

해당월에 최근 3개월 금액의 합을 구하고 싶습니다. 

 

예를 들어 

201805 월은 03,04,05 월의 합인 4000

201804 월은 02,03,04 월의 합인 5000

 

으로 구하고 싶습니다. 

 

고수님의 조언부탁드립니다. 

by 정민호 [2019.04.10 10:25:11]

참고로 위 로직을  네티자로 구현할려고 합니다. 


by 마농 [2019.04.10 10:53:10]

중간에 빈 월이 존재할 가능성이 없다면? 간단히 v1, v2 방법을 사용하셔도 됩니다.
중간에 빈 월이 존재할 가능성이 있다면? 반드시 v3, v4 방법을 사용해야만 합니다.
http://gurubee.net/lecture/2829
 

WITH t AS
(
SELECT '201801' ym, 1000 amt FROM dual
--UNION ALL SELECT '201802', 2000 FROM dual
UNION ALL SELECT '201803', 1000 FROM dual
UNION ALL SELECT '201804', 2000 FROM dual
UNION ALL SELECT '201805', 1000 FROM dual
)
SELECT ym
     , amt
     , SUM(amt) OVER(ORDER BY ym ROWS 2 PRECEDING) v1
     , SUM(amt) OVER(ORDER BY ym ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) v2
     , SUM(amt) OVER(ORDER BY TO_DATE(ym, 'yyyymm') RANGE INTERVAL '2' MONTH PRECEDING) v3
     , SUM(amt) OVER(ORDER BY TO_DATE(ym, 'yyyymm') RANGE BETWEEN INTERVAL '2' MONTH PRECEDING AND CURRENT ROW) v4
  FROM t
;

 


by 정민호 [2019.04.10 14:21:44]

감사합니다. 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입