使用 SQL 服务器移动标准差

Moving standard deviation with SQL Server

我有一个程序每天将一个非常大的 table 的移动平均线缓存到另一个 table 中,输出如下 table 所示:

date       AvgNet
---------- ----------------------
2014-05-12 116.553598762874
2014-05-13 116.672864387303
2014-05-14 116.141278835128
2014-05-15 118.067104561961
2014-05-16 117.92175621176
2014-05-19 117.056031596087

如何使用 SQL 计算上述 table 的移动标准偏差(即每个日期过去 x 行数的标准偏差)?

我看过 window 移动平均线的函数和 CTE 解决方案,但据我了解,这些解决方案不能适用于标准偏差。

SQL服务器有stdev()功能。但是,它不做累积标准偏差,因此您需要使用相关子查询或 cross apply:

select t.*, t2.stdev10 
from table t outer apply
     (select stdev(t2.avgnet) as stdev10
      from (select top 10 avgnet
            from table t2
            where t2.date <= t.date
            order by t2.date desc
           ) t2
      ) t2;

我看到您使用的是 SQL 2008。如果您使用的是 SQL 2012 或更高版本,那么以下方法就足够了。

SELECT  * ,
        STDEV(avgnet) 
           OVER ( 
              ORDER BY date 
              ROWS BETWEEN 10 PRECEDING AND CURRENT ROW 
           ) AS s
FROM    dbo.TestData