PostgreSQL перемещение стола - PullRequest
0 голосов
/ 30 мая 2018

Я хотел бы создать скользящее среднее и сохранить результаты.Я мог бы либо создать новую таблицу из запроса, либо добавить новый столбец с результатами.Какой вариант предпочтительнее, и если я хочу создать столбец со скользящей средней, как я могу это сделать?

http://sqlfiddle.com/#!17/871c6/4

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вместо этого вы можете создать вид.

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 

, чтобы новые данные были видны в представлении.

0 голосов
/ 31 мая 2018

вы можете создать таблицу с таким результатом.

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
...