我正在尝试在sql server中创建一个存储过程,该过程计算如下移动平均值:
CREATE PROCEDURE calcMA (@value_name AS varchar(100),
@period AS INT,
@col1 AS varchar(100),
@col2 AS varchar(100))
WITH CTE_MA (DT, RowNumber, MA) AS
(
SELECT
DT,
ROW_NUMBER() OVER (ORDER BY DT ASC) RowNumber,
AVG(LSTPX) OVER (ORDER BY DT ASC ROWS 9 PRECEDING) AS MA
FROM
dbo.myDb
WHERE
Col1 = @Col1 AND Col2 = @Col2
)
SELECT
@value_name AS Name, DT,
IIF (RowNumber > @period - 1, MA, NULL) AS 'Value'
FROM
CTE_MA
我遇到的问题是我想要 @period
用于替换中数字9的参数 ORDER BY
然而,我发现这很难做到。
如果我尝试 ORDER BY DT ASC ROWS @period -1 PRECEDING
或者 ORDER BY DT ASC ROWS (@period - 1) PRECEDING
,我得到语法错误。
我读到的关于这个的问题有一个文本变量,在 ORDER BY
条款,该条款要求 CASE
表达式,但我还没有看到关于如何输入连续数的答案。
谢谢你的帮助。
1条答案
按热度按时间vjhs03f71#
我想你可以用它做你想做的事
apply
: