LoginSignup
0
1

More than 5 years have passed since last update.

移動平均を求めるOracleのSQL

Posted at

移動平均を求めるOracleのSQL

時系列分析でよく使う移動平均について。

AVGの集計関数にOVER以下の分析関数コマンドを追加して求めます。
3日の移動平均の関数だとこちら。2日前のデータまで取ってきて平均値を求めています。

AVG(数量) OVER(ORDER BY 日付 RANGE INTERVAL '2' DAY PRECEDING) 

ROW#の移動平均を求めるSQLはこのようになります。

SELECT
  ROW_NUMBER AS ROW#
 ,ROW_DAY    AS DAY
 ,AVG(ROW_NUMBER) OVER(ORDER BY ROW_DAY  RANGE INTERVAL '2' DAY Preceding) AS "移動平均"
FROM
(
SELECT 
  ROWNUM            AS ROW_NUMBER
 ,SYSDATE + ROWNUM  AS ROW_DAY
FROM ALL_CATALOG WHERE ROWNUM <= 10
)
ORDER BY ROW_DAY DESC

上のSQLの実行結果。月単位のデータでしたら、DAYをMONTHに変えれば月の移動平均になります。

ROW#    DAY        移動平均
10    2018-10-15    9
9     2018-10-14    8
8     2018-10-13    7
7     2018-10-12    6
6     2018-10-11    5
5     2018-10-10    4
4     2018-10-09    3
3     2018-10-08    2
2     2018-10-07    1.5
1     2018-10-06    1
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1