1
一般问题是如何更新第n行上的column_A,该行取决于第n-1行上的column_A。MySQL:“递归”更新行。 EMA示例
具体的问题是计算和持久EMA(指数移动平均)是一个MYSQL表。 EMA(n)= 0.1 *价格+ 0.9 EMA(n-1) 因此,我们有一个递归方程,其中第n行的值取决于值行(n-1)
在任何编程语言中,这都很容易计算。
但是,如果EMA作为列存储在MYSQL表中。如何在MYSQL脚本中有效地计算和更新EMA列?现在,我只能在循环中进行顺序更新。我的丑陋解决方案列在这里。它需要订单(n)更新。
任何聪明的想法,只需要订单(1)更新?
非常感谢您
DELIMITER $$
DROP PROCEDURE IF EXISTS update_ema$$
CREATE PROCEDURE update_ema(
IN series_id INT
)
BEGIN
DECLARE counter INT;
SET counter = 2;
WHILE counter <= 5000 DO
update price_table as x
inner join price_table y
on x.id = y.id and x.row_num = y.row_num+1
and x.Id=series_id and x.row_num = counter
set x.EMA19 = func_ema(19, y.EMA19, x.price);
SET counter = counter + 1;
END WHILE;
END$$
DELIMITER ;