Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于计算SQL Server 2008 R2中的平均值的窗口函数_Sql_Sql Server_Sql Server 2008 R2_Average_Partitioning - Fatal编程技术网

用于计算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,发布您所有的表和示例数据,在您的问题中,您甚至没有提到一个表名,您希望我们在问题中缺少信息时回答吗?我给了您一个示例查询,它回答了您上面的问题,使用它并对其进行更新,使其与原始查询一起工作