此非常简单的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个月)。如何做到这一点?
编辑这就是数据的样子:
这是预期的结果:
我先按月份汇总,然后计算移动平均值:
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);