如何找到滚动3个月的方差?

时间:2018-05-02 09:14:00

标签: sql sql-server ssms

我有一个包含两列,日期和金额的数据集。我想找到过去3个月的方差(VAR),然后通过平均它们(AVG)按月汇总方差(VAR)。我还想确保如果可用的数据少于3个月,那么就不要计算方差。 (所以我有6个月的数据,我将只有过去3个月的平均差异)。非常感谢

注意:我正在使用SSMS

Date                 Amount
23 February 2017    £41,079
07 January 2017     £25,856
....

1 个答案:

答案 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;