PostgreSQL表移动平均值

PostgreSQL表移动平均值,postgresql,moving-average,Postgresql,Moving Average,我想创建一个移动平均线并存储结果。我可以从查询中创建一个新表,也可以添加一个包含结果的新列。首选的选项是什么?如果我想用移动平均线创建一个列,我如何才能做到这一点 您可以创建一个具有如下结果的表 CREATE TABLE foo AS SELECT year, ptotww, AVG (ptotww) OVER(ORDER BY year ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as avg3_ptotww FROM

我想创建一个移动平均线并存储结果。我可以从查询中创建一个新表,也可以添加一个包含结果的新列。首选的选项是什么?如果我想用移动平均线创建一个列,我如何才能做到这一点


您可以创建一个具有如下结果的表

CREATE TABLE foo AS 
SELECT year, ptotww,
   AVG (ptotww)
       OVER(ORDER BY year ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as avg3_ptotww
       FROM ma_test

您可以创建一个具有如下结果的表

CREATE TABLE foo AS 
SELECT year, ptotww,
   AVG (ptotww)
       OVER(ORDER BY year ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as avg3_ptotww
       FROM ma_test

您可以创建一个视图

CREATE VIEW ma_test_vw AS
SELECT ma_test.*,
       SUM(ptotww)
           OVER(ORDER BY year ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as sum_ptotww
FROM ma_test
但是,如果数据没有经常更改,那么每次运行查询时重新计算数据可能不是最优的,因此在这种情况下,您可以创建一个物化视图

CREATE MATERIALIZED VIEW ma_test_vw AS
SELECT ma_test.*,
       SUM(ptotww)
           OVER(ORDER BY year ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as sum_ptotww
FROM ma_test;
然后,在更改/向原始表添加一些数据后,您必须执行以下操作:

REFRESH MATERIALIZED VIEW ma_test_vw 

为了使新数据在视图中可见。

您可以创建一个视图

CREATE VIEW ma_test_vw AS
SELECT ma_test.*,
       SUM(ptotww)
           OVER(ORDER BY year ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as sum_ptotww
FROM ma_test
但是,如果数据没有经常更改,那么每次运行查询时重新计算数据可能不是最优的,因此在这种情况下,您可以创建一个物化视图

CREATE MATERIALIZED VIEW ma_test_vw AS
SELECT ma_test.*,
       SUM(ptotww)
           OVER(ORDER BY year ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as sum_ptotww
FROM ma_test;
然后,在更改/向原始表添加一些数据后,您必须执行以下操作:

REFRESH MATERIALIZED VIEW ma_test_vw 
以使新数据在视图中可见