SQL-截断日期上的滚动平均值
我想用精度在第二位的数据,对一个计算字段进行一周的滚动平均。这就是为什么我第一次将日期截断为周 所以我的临时问题是SQL-截断日期上的滚动平均值,sql,postgresql,aggregate-functions,amazon-redshift,Sql,Postgresql,Aggregate Functions,Amazon Redshift,我想用精度在第二位的数据,对一个计算字段进行一周的滚动平均。这就是为什么我第一次将日期截断为周 所以我的临时问题是 SELECT week, AVG(my_value) OVER(ORDER BY week ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS avg_my_value FROM (SELECT id, DATE_TRUNC('week', created_at) AS week,
SELECT week, AVG(my_value) OVER(ORDER BY week ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS avg_my_value
FROM
(SELECT id,
DATE_TRUNC('week', created_at) AS week,
my_value
FROM my_table
ORDER BY week ASC
)
GROUP BY week
我的问题是,平均值工作,但它的所有行都有相同的一周单独完成!我认为这是因为必须添加某种内部分组,但我的问题是将其设想为平均数
如果这很重要,我正在寻找一种适用于红移或PostgreSQL的解决方案。如果您想要一个累积平均值,那么:
SELECT week,
AVG(AVG(my_value)) OVER (ORDER BY week ASC) AS avg_my_value
FROM (SELECT id, DATE_TRUNC('week', created_at) AS week, my_value
FROM my_table
) t
GROUP BY week;
注:
- 子查询中的排序依据是多余的
- 注意聚合函数的嵌套
orderby
的windowing子句。确实如此。平均数是多少?做一个单一的平均值和先平均同一周的所有值,然后计算到该周的滚动平均值是不同的。@martin。您可以使用非常类似的逻辑来获取值之和除以计数之和。这将是总体平均值,而不是每周平均值的平均值。是的,确实做到了!不过,我们的目标是一个具有纯AVG功能的单一解决方案。这根本不可能吗?