SQL - 在截断日期上滚动平均值

时间:2018-01-04 18:27:11

标签: sql postgresql aggregate-functions amazon-redshift

我想在一周内根据精度在第二位的数据进行计算字段的滚动均值。这就是为什么我首先将日期截断为一周。

所以我的临时查询是

public class PurgeQueuesBeforeSuite extends TestRunnerBeforeSuiteSupport {

    @Autowired
    @Qualifier("connectionFactory")
    ConnectionFactory queueConnectionFactory;

    @Value("${my.out.queue.name}")
    private String myOutQueueName;

    @Override
    public void beforeSuite(TestRunner runner) {
        runner.purgeQueues(action ->
        action.connectionFactory(queueConnectionFactory)
                .queue(myOutQueueName));
    }
}

我遇到的问题是AVG可以正常工作,但它是针对所有同一周的行单独完成的!我认为这是因为必须添加某种内部分组,但我遇到的问题是将其设想为平均值。

如果重要,我正在寻找适用于Redshift或PostgreSQL的解决方案。

1 个答案:

答案 0 :(得分:1)

如果您想要累积平均值,那么:

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;

注意:

  • 子查询中的ORDER BY是多余的。
  • 请注意聚合函数的嵌套。