我有一个包含两列,日期和金额的数据集。我想找到过去3个月的方差(VAR),然后通过平均它们(AVG)按月汇总方差(VAR)。我还想确保如果可用的数据少于3个月,那么就不要计算方差。 (所以我有6个月的数据,我将只有过去3个月的平均差异)。非常感谢
注意:我正在使用SSMS
Date Amount
23 February 2017 £41,079
07 January 2017 £25,856
....
答案 0 :(得分:0)
如果您的方差定义与此函数的作用匹配,则可以使用内置聚合/窗口函数var()
。
如果您每行有一天且愿意接受90天为“3个月”,那么您可以这样做:
select t.*, var(amount) over (order by date rows between 89 preceding and current row) as rolling_var
from t;
如果这些条件不成立,效率低得多的方法使用自连接:
select t.date, t.amount, var(t2.amount)
from t join
t t2
on t2.date > dateadd(month, -3, t.date) and t2.date <= t.date
group by t.date, t.amount;