중간에 빈 월이 존재할 가능성이 없다면? 간단히 v1, v2 방법을 사용하셔도 됩니다.
중간에 빈 월이 존재할 가능성이 있다면? 반드시 v3, v4 방법을 사용해야만 합니다.
http://gurubee.net/lecture/2829
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 ; |