一尘不染

SQL移动平均

sql

如何在SQL中创建移动平均线?

当前表:

Date             Clicks 
2012-05-01       2,230
2012-05-02       3,150
2012-05-03       5,520
2012-05-04       1,330
2012-05-05       2,260
2012-05-06       3,540
2012-05-07       2,330

所需的表或输出:

Date             Clicks    3 day Moving Average
2012-05-01       2,230
2012-05-02       3,150
2012-05-03       5,520          4,360
2012-05-04       1,330          3,330
2012-05-05       2,260          3,120
2012-05-06       3,540          3,320
2012-05-07       2,330          3,010

阅读 179

收藏
2021-03-17

共1个答案

一尘不染

一种方法是在同一张桌子上连接几次。

select
 (Current.Clicks 
  + isnull(P1.Clicks, 0)
  + isnull(P2.Clicks, 0)
  + isnull(P3.Clicks, 0)) / 4 as MovingAvg3
from
 MyTable as Current
 left join MyTable as P1 on P1.Date = DateAdd(day, -1, Current.Date)
 left join MyTable as P2 on P2.Date = DateAdd(day, -2, Current.Date)
 left join MyTable as P3 on P3.Date = DateAdd(day, -3, Current.Date)

调整ON-Clauses的DateAdd组件以匹配您希望移动平均线严格是从过去到现在还是从几天前到未来几天。

  • 对于仅需要几个数据点移动平均值的情况,这非常有用。
  • 对于具有多个数据点的移动平均值,这不是最佳解决方案。
2021-03-17