按日期计算滚动平均值和标准差

时间:2019-08-28 02:12:17

标签: sql sql-server sql-server-2012

我有下表,需要根据日期计算滚动平均值和标准差。我在表格下方列出了预期的结果。我正在尝试根据日期计算id的滚动平均值。 rollAvgA是基于metricA计算的。例如,对于特定日期首次出现的id,结果应返回零,因为它没有任何先前的值。请让我知道如何实现?

当前表:

this.context

预期表:

Date       id     metricA  
8/1/2019   100       2    
8/2/2019   100       3
8/3/2019   100       2
8/1/2019   101       2    
8/2/2019   101       3
8/3/2019   101       2
8/4/2019   101       2

1 个答案:

答案 0 :(得分:0)

您似乎想要累积平均值。基本上是这样:

select t.*,
       avg(metricA * 1.0) over (partition by id order by date) as rollingavg
from t;

唯一的警告是,第一个值是一个值的平均值。要处理此问题,请使用case表达式:

select t.*,
       (case when row_number() over (partition by id order by date) > 1
             then avg(metricA * 1.0) over (partition by id order by date)
             else 0
        end) as rollingavg
from t;