在PostgreSQL中有一种简单的方法可以计算12个月的移动平均线吗?

问题描述 投票:0回答:1

此非常简单的SQL可以计算明确定义的时间段(例如年,月,季度,周,日)的平均值,中位数等:

SELECT
  date_trunc('year', t.time2), -- or hour, day, week, month, year
  count(1), 
  percentile_cont(0.25) within group (order by t.price) as Q1,
  percentile_cont(0.5) within group (order by t.price) as Q2,
  percentile_cont(0.75) within group (order by t.price) as Q3,
  avg(t.price) as A,
  min(t.price) as Mi,
  max(t.price) as Mx

FROM my_table AS t
GROUP BY 1
ORDER BY date_trunc

该表包含带有日期(时间戳)和价格(bigint)的单个交易的列表。

但是,我正在努力调整它以计算运行/移动值(例如4周或6个月,2个季度或12个月)。如何做到这一点?

编辑这就是数据的样子:

enter image description here

这是预期的结果:

enter image description here

postgresql datetime moving-average dynamicquery
1个回答
0
投票

我先按月份汇总,然后计算移动平均值:

SELECT mon,
       sum(s_price) OVER w / sum(c_price) OVER w
FROM (SELECT date_trunc('month', time2::timestamp) AS mon,
             sum(price) AS s_price,
             count(price) AS c_prize
      FROM my_table
      GROUP BY date_trunc('month', time2::timestamp)) AS q
WINDOW w AS (ORDER BY mon
             RANGE BETWEEN '6 months'::interval PRECEDING
                       AND '6 months'::interval FOLLOWING);
© www.soinside.com 2019 - 2024. All rights reserved.