窗口功能

时间:2013-02-01 22:27:09

标签: sql sql-server 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,Level 15,State 1,Line 24   'ROWS'附近的语法不正确。

为什么我会收到错误?我使用了从您的网站获得的代码

1 个答案:

答案 0 :(得分:1)

您的原始语法仅适用于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