Sql server 如何在SQL中创建移动平均法?

Sql server 如何在SQL中创建移动平均法?,sql-server,sql-server-2008,moving-average,Sql Server,Sql Server 2008,Moving Average,如何在SQL中创建移动平均法 订单表: id_order id_staff date_order O0001 S0003 12/12/2555 O0002 S0003 12/12/2555 O0003 S0003 12/12/2555 O0004 S0003 13/12/2555 O0005 S0003 13/12/2555 O0006 S0003 13/12/2555 O0007 S0003 13/12/2555 O0008 S000

如何在SQL中创建移动平均法

订单表:

id_order id_staff date_order
O0001   S0003   12/12/2555
O0002   S0003   12/12/2555
O0003   S0003   12/12/2555
O0004   S0003   13/12/2555
O0005   S0003   13/12/2555
O0006   S0003   13/12/2555
O0007   S0003   13/12/2555
O0008   S0003   13/12/2555
idde_order id_order id_material count
M0004   O0003   S0002   3   
M0005   O0003   S0003   5   
M0009   O0003   S0002   3   
M0010   O0003   S0003   5   
M0011   O0003   S0001   3
订单明细表:

id_order id_staff date_order
O0001   S0003   12/12/2555
O0002   S0003   12/12/2555
O0003   S0003   12/12/2555
O0004   S0003   13/12/2555
O0005   S0003   13/12/2555
O0006   S0003   13/12/2555
O0007   S0003   13/12/2555
O0008   S0003   13/12/2555
idde_order id_order id_material count
M0004   O0003   S0002   3   
M0005   O0003   S0003   5   
M0009   O0003   S0002   3   
M0010   O0003   S0003   5   
M0011   O0003   S0001   3
所需的表联接或输出:

Date         count  3 day Moving Average
2012-05-01       2
2012-05-02       3
2012-05-03       5          4
2012-05-04       1          3
2012-05-05       2          3
2012-05-06       3          3
2012-05-07       2          3
理论

Month count   3-Month Moving Average     4-Month Moving Average
January 10       
February12       
March   13       
April   16  (10+12+13)/3=11.67   
May     19  (12+13+16)/3=13.67   (10+12+13+16)/4=12.75 
June    23  (13+16+19)/3=16      (12+13+16+19)/4=15
July    26  (16+19+23)/3=19.33   (13+16+19+23)/4=17.75
August      (19+23+26)/3=22.67   (16+19+23+26)/4=21 

谢谢亲爱的

请在发帖前至少做些调查。通过谷歌搜索“SQL移动平均值”可返回数千篇相关、有用和深入的文章。如果您使用的是SQL Server 2012,则可以通过窗口功能实现这一点。这取决于您希望如何解释缺少的天数/月份/任何内容(如果有),您可以选择或。SQL Server 2008中的聚合窗口函数不支持
order by
。将其设置为2012年之前,问题中使用了数据。
create table tmp (
  order_date datetime,
  [count] int
)


insert into tmp
  values ('2012-05-01', 2),
         ('2012-05-02', 3),
         ('2012-05-03', 5),
         ('2012-05-04', 1),
         ('2012-05-05', 2),
         ('2012-05-06', 3),
         ('2012-05-07', 2) 
GO

select t.order_date, t.[count], ceiling((t.[count] + t2.[count] + t3.[count]) / 3.0) as moving_average_3day
from (
  select order_date, dateadd(day, -1, order_date) as prev, dateadd(day, -2, order_date) as prev2, [count]
  from tmp
) t
left outer join tmp t2 on t.prev = t2.order_date
left outer join tmp t3 on t.prev2 = t3.order_date
order by 1