一般问题是如何更新第n行的column_A,这取决于第n-1行的column_A。
具体问题是计算和持久性EMA(指数移动平均线)是一个MYSQL表。
用于EMA计算(10%或19天EMA),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 ;
答案 0 :(得分:0)
如果column_a,row(n)的值取决于column_a,row(n-1)的值,那么更改它将改变所有后续行中的值:
(不是代码)
if
x = row number
row(x) col(a) = f(row(x-1) col(a))
then
where x = n
row(n) col(a) = f(row(n-1) col(a))
where x = n + 1
row((n+1)) col(a) = f(row((n+1)-1) col(a))
row(n+1) col(a) = f(row(n) col(a))
当您更改n时,您必须更新n + 1,这将一直持续到表的末尾。我不相信你能比你拥有的更好。