用于计算SQL Server 2008 R2中的平均值的窗口函数
我对窗口函数没有太多的经验,我必须用一个来计算平均值, 这是我的代码:用于计算SQL Server 2008 R2中的平均值的窗口函数,sql,sql-server,sql-server-2008-r2,average,partitioning,Sql,Sql Server,Sql Server 2008 R2,Average,Partitioning,我对窗口函数没有太多的经验,我必须用一个来计算平均值, 这是我的代码: AVG(b.TotalSilkHrs) OVER(partition BY b.TECHNICIANCODE ORDER BY b.rankID ROWS BETWEEN CURRENT ROW and 3 FOLLOWING) AS MovingAvg 我计算在子查询中计算的总和的平均值。 这给了我一个错误: Msg 102,15级,状态1,第24行 “行”附近的语法不正确 为什么我会出错?我使
AVG(b.TotalSilkHrs) OVER(partition BY b.TECHNICIANCODE
ORDER BY b.rankID
ROWS BETWEEN CURRENT ROW and 3 FOLLOWING) AS MovingAvg
我计算在子查询中计算的总和的平均值。
这给了我一个错误:
Msg 102,15级,状态1,第24行
“行”附近的语法不正确
为什么我会出错?我使用了从您的站点获得的代码您的原始语法仅适用于SQL Server 2012,对于较旧的版本,请尝试以下方法
;WITH AVGCTE AS
(
SELECT *,
ROW_NUMBER() OVER(partition BY TECHNICIANCODE ORDER BY rankID) Rn
FROM TableA
)
SELECT A.*, B.AVG_COL
FROM AVGCTE A
CROSS APPLY
(
SELECT x.AVG(TotalSilkHrs) AVG_COL
FROM AVGCTE x WHERE x.Rn BETWEEN A.rn and a.rn + 2
AND A.TECHNICIANCODE = x.TECHNICIANCODE
) B
我认为SQLServer不支持这种类型的分区定义。如果有的话,您需要SQL Server 2012,在此之前,窗口函数的实现非常有限。您使用的是哪个版本的
SQL Server
?SQL Server 2012.2008 R2支持该条款。还有什么方法可以在子查询上计算受时段限制的平均值?@MikaelEriksson:Window函数是在SQL Server 2005中引入的,但它不支持通过在窗口定义中包含order by
来运行聚合。这是在SQL Server 2012中引入的,但我仍然不确定2012年是否支持…行之间的选项第一条语句不起作用,因为我必须限制周期第二条代码也不起作用,因为我的总和是从5个不同的表中计算出来的,当我在这个sub-select语句中排列它们时,这两种方法都不适用。@user2019324,发布您所有的表和示例数据,在您的问题中,您甚至没有提到一个表名,您希望我们在问题中缺少信息时回答吗?我给了您一个示例查询,它回答了您上面的问题,使用它并对其进行更新,使其与原始查询一起工作