使用 SQL,我怎样才能在给定的天数内对每一天的未指定数量的记录进行滚动平均?

Posted

技术标签:

【中文标题】使用 SQL,我怎样才能在给定的天数内对每一天的未指定数量的记录进行滚动平均?【英文标题】:Using SQL, how could I take a rolling average over a given number of days across an unspecified number of records each of those days? 【发布时间】:2020-06-24 17:03:12 【问题描述】:

我有以下字段。下面的每条记录都是独一无二的。

我想为每个不同的“record_type”和“something_ind”获取前几天所有字段“score”的滚动平均值

数据:

期望的输出:

SQL 查询:

select
     date
    ,record_type
    ,something_ind
    ,avg(score) over(partition by date, record_type, something_ind order by date, record_type, something_ind rows between 6 preceding and current row as rolling_average_score
from table
group by 1,2,3

【问题讨论】:

“滚动平均”是指“累计平均”吗? 【参考方案1】:

我想为每个不同的 record_typesomething_ind 获得前几天所有字段 score 的滚动平均值。

使用窗口函数。据我了解你的问题,你想要:

select
    t.*,
    avg(score) over(
        partition by record_type, something_ind 
        order by date
    ) avg_score
from mytable t

【讨论】:

以上是关于使用 SQL,我怎样才能在给定的天数内对每一天的未指定数量的记录进行滚动平均?的主要内容,如果未能解决你的问题,请参考以下文章

统计日期范围内的天数

如何在 MySQL 中发现一个月中每一天的总和?

SQL Count 天数到本月的第一天

sql 查询一段时间内 每一天的统计数据

如何获取给定记录组中每一天的最后一条记录?

算法问题——生日悖论