我一直在努力为数据集添加移动平均线。这是我必须要做的事情:
ID, SamplerName, CreatedOn, Average, MovingAverage
1, type A, 05/01/2016, 100, null
2, type B, 05/01/2016, 110, null
3, type A, 05/02/2016, 105, null
4, type B, 05/02/2016, 102, null
这是我数据的一个非常简化的示例,实际上我有大约15个SamplerNames,并且将来可能会发生变化。
我尝试设置一个游标来遍历一个列表,该列表是通过在表中的sampler标签上执行select distinct而生成的,然后通过执行类似的操作来更新MovingAverage
AVG([Average]) OVER (ORDER BY [CreatedOn] ROWS UNBOUNDED PRECEDING)
但我遇到了错误
"窗口函数只能出现在select或order by order"。
中
我已尝试过其他一些解决方案,但我无法弄明白,我希望有人可以帮我一臂之力。
答案 0 :(得分:0)
您可以使用可更新的CTE:
in controller: Object
in service: Object
答案 1 :(得分:0)
行/范围子句是在SQL Server 2008中引入的。如果您使用的是2008+,则会错过partition by SamplerName
avg(Average) over (partition by SamplerName order by CreatedOn rows unbounded preceding)
示例:
declare @T table (ID int, SamplerName varchar(6), CreatedOn datetime, Average float)
insert into @T (ID, SamplerName, CreatedOn, Average)
select 1, 'type A', '2016-05-01', 100 union all
select 2, 'type B', '2016-05-01', 110 union all
select 3, 'type A', '2016-05-02', 105 union all
select 4, 'type B', '2016-05-02', 102
select *,
avg(Average) over (partition by SamplerName order by CreatedOn rows unbounded preceding)
from @T