중간에 빈 월이 존재할 가능성이 없다면? 간단히 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 ;