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 ;