我有下表,需要根据日期计算滚动平均值和标准差。我在表格下方列出了预期的结果。我正在尝试根据日期计算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
答案 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;