如何找到滚动的 3 个月方差?
Posted
技术标签:
【中文标题】如何找到滚动的 3 个月方差?【英文标题】:How to find the rolling 3 months variance? 【发布时间】:2018-05-02 09:13:59 【问题描述】:我有一个包含两列、日期和金额的数据集。我想找到过去 3 个月的方差 (VAR),然后通过按月平均 (AVG) 来聚合方差 (VAR)。我还想确保如果有少于 3 个月的数据可用,则不计算方差。 (所以我有 6 个月的数据,我只有过去 3 个月的平均方差)。非常感谢
注意:我正在使用 SSMS
Date Amount
23 February 2017 £41,079
07 January 2017 £25,856
....
【问题讨论】:
超过 3 个值的方差是否有用? 你是对的!我认为最好取每日方差(过去 90 天),然后按月平均? 我相应地编辑了问题,谢谢@Onno 请在本声明中定义“方差”。 VAR 中的方差 【参考方案1】:如果您对方差的定义与此函数的作用相匹配,您可以使用内置聚合/窗口函数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;
【讨论】:
每天记录不止一条。我尝试基于自加入运行您的第二个建议,但已经运行了 20 多分钟。 (我有 40 万条记录)以上是关于如何找到滚动的 3 个月方差?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 中简单地计算时间序列的滚动/移动方差?