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,并使用其他东西作为前缀——或者根本不使用前缀!