【发布时间】:2020-11-14 22:35:43
【问题描述】:
我有以下 mySQL (v5.7) 存储过程,效果很好(它计算最近 25 行的平均值):
CREATE DEFINER=`SqueezeOJ`@`%` PROCEDURE `NVG_SMA25`(
IN myDate DATE,
OUT mySMA25 DECIMAL(8,2)
)
BEGIN
SELECT ROUND(AVG(ClosingPrice), 2) INTO mySMA25 FROM NVG
WHERE TradeDate IN (SELECT * FROM (SELECT DISTINCT TradeDate
FROM NVG
WHERE TradeDate <= myDate
ORDER BY TradeDate DESC LIMIT 25) as calculating);
END
我想将 LIMIT 25 参数化为 LIMIT X - 我可以将 X 传递到过程中,但我尝试的一切都会导致错误。
有人能指出正确的方向吗?
谢谢,杰森
【问题讨论】:
-
你不能参数化它。 SQL 语法需要一个文字数字。在大多数情况下,程序是多余的,尤其是像这样的微不足道的程序。以后版本mysql或mariadb版本中的窗口函数让这个查询更容易
-
这里没有任何“程序”,所以为什么不简单地使用查询
-
也许有更好的方法?基本上,我每晚都在下载股票价格,然后计算它们的几个移动平均线(25、50、100)。我希望能够参数化股票表的名称以及运行移动平均线的时间长度。我完全愿意接受建议。谢谢!
标签: mysql stored-procedures parameters