Parameters 在SQL Server 2012中,我可以使用前面行中的参数来计算动态移动平均值吗?

Parameters 在SQL Server 2012中,我可以使用前面行中的参数来计算动态移动平均值吗?,parameters,sql-server-2012,moving-average,Parameters,Sql Server 2012,Moving Average,计算指定股票代码和天数的动态移动平均数的存储过程: ALTER PROCEDURE sp_MovAvg (@ticker NVARCHAR(6), @days INT) AS SELECT @ticker AS Ticker, [Date], AVG ([px_Close]) OVER (ORDER BY @ticker, [Date] ROWS BETWEEN @days PRECED

计算指定股票代码和天数的动态移动平均数的存储过程:

ALTER PROCEDURE sp_MovAvg 
    (@ticker NVARCHAR(6),
     @days INT)
AS
  SELECT 
      @ticker AS Ticker, [Date],
      AVG ([px_Close]) OVER (ORDER BY @ticker, [Date] 
                             ROWS BETWEEN @days PRECEDING AND CURRENT ROW) AS moving_avg
  FROM 
      daily_data
  WHERE 
      Ticker LIKE @ticker
  ORDER BY
      Ticker ASC, [Date] DESC
使用@days时,我收到了avg函数的错误消息。很遗憾,以下行之间存在错误消息:

::= { 无界前导 |先前的 |当前行 } ::= { } 您可以通过使用LAG和大量CASE表达式或自连接来解决这个问题。 但最简单的可能是动态SQL

别忘了参数化@ticker 创建或更改过程MovAvg @股票代码NVARCHAR6, @天整数 像 声明@sql nvarcharmax=N' 选择 @股票代码作为股票代码,[日期], @ticker,[Date]平均[px_Close]超过订单-你是说ticker,[Date]?? “+CAST@days前一行为nvarchar10+N,当前行为移动平均值 从…起 每日数据 哪里 类股票代码@Ticker 订购人 股票代码ASC,[日期]描述; '; EXEC sp_executesql @sql, N'@ticker NVARCHAR6', @股票代码=@ticker; 旁注:存储过程不应使用sp_uu前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp_u,并使用其他东西作为前缀——或者根本不使用前缀!