참고로 위 로직을 네티자로 구현할려고 합니다.
중간에 빈 월이 존재할 가능성이 없다면? 간단히 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
;
감사합니다.