每月移动平均线SQL

时间:2018-06-01 10:55:58

标签: postgresql moving-average

我有一个带有列的postgreSQL表:

  1. 年[整数1960-2014]
  2. 月[整数1-12]和
  3. 值列。 [双精度]
  4. 年份和月份是单独的列,因为我无法控制输入数据。我可以将它们合并到datetime列中。

    现在我想计算10年移动平均线。 1969年1月的10Y移动平均线应为AVG(1960年1月,1961年1月,1969年1月)等。

    这是我到目前为止所做的:

    SELECT year,month, value,
        AVG(value)
            OVER(ORDER BY year ROWS BETWEEN 9 PRECEDING AND CURRENT ROW) as ma10_value
    FROM table_name
    

1 个答案:

答案 0 :(得分:0)

使用Partition解释here

SELECT value, year, month,
  SUM(value)
    OVER(PARTITION BY month ORDER BY year ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as ma2_value
FROM test01

SQLfiddle