SQLite-滚动平均值/总和

时间:2020-07-26 19:53:06

标签: sql database sqlite average window-functions

我有一个如下所示的数据集,想知道如何对当前记录及其后的两个记录进行滚动平均。示例:让我们考虑第一个记录,其总数为3,然后是4和7,现在,第一个记录的3天滚动平均值为4.6,依此类推。

Date  Total
1      3
2      4
3      7
4      1
5      2
6      4

预期输出:

Date  Total 3day_rolling_Avg
1      3       4.6
2      4       4
3      7       3.3
4      1       2.3
5      2       null
6      4       null

PS:具有“ null”值并不重要。这只是一个样本数据,我需要查看3天以上(例如:滚动30天)

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是使用弹出式窗口框架的窗口avg()

select 
    t.*,
    avg(total) 
        over(order by date rows between current row and 2 following) as "3d_rolling_avg"
from mytable t

如果您希望在少于2个前导行的情况下返回null值(如预期结果所示),则可以在其顶部使用row_number()

select 
    t.*,
    case when rank() over(order by date desc) <= 2
    then avg(total) 
             over(order by date rows between current row and 2 following)
    end as "3d_rolling_avg"
from mytable t