gpt4 book ai didi

mysql - MYSQL中收盘价的简单移动平均计算和更新表

转载 作者:可可西里 更新时间:2023-11-01 07:08:20 24 4
gpt4 key购买 nike

我可以使用一些帮助(最好是虚拟指南)来更新下表:

CREATE TABLE `SYMBOL` (
`day` date NOT NULL,
`open` decimal(8,3) DEFAULT NULL,
`high` decimal(8,3) DEFAULT NULL,
`low` decimal(8,3) DEFAULT NULL,
`close` decimal(8,3) DEFAULT NULL,
`volume` bigint(20) DEFAULT NULL,
`adj_close` decimal(8,3) DEFAULT NULL,
`moving_average` decimal(8,3) DEFAULT NULL,
PRIMARY KEY (`day`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

moving_average 列现在是空的。所有其他列都已填充(目前,我可以接受这是“静态”的,它不需要在我添加行时更新 - 尽管如果这很容易做到,那就太好了)。这是我希望计算的 20 天移动平均线。

我已尽力执行此处的步骤:

How do I calculate a moving average using MySQL?

我的查询是这样的:

SELECT
`close`,
(
SELECT
AVG(`close`) AS moving_average
FROM
SYMBOL T2
WHERE
(
SELECT
COUNT(*)
FROM
SYMBOL T3
WHERE
`day` BETWEEN T2.day AND T1.day
) BETWEEN 1 AND 20
)
FROM
SYMBOL T1

我是否正确修改了查询?将结果写入 moving_average 列需要做什么?

当我运行上面的代码时,没有任何反应(它说它正在运行,没有错误,让它运行了很长时间后我就停止了它)。列 moving_average 仍然有 NULL 值。

我也看了这个答案: How to calculated multiple moving average in MySQL

但是,我不确定我需要对表格的回复进行哪些更改。

感谢任何帮助。

最佳答案

有两种方法:

  1. 创建一个 update 查询来更新表中的每一行
  2. 创建一个完成这项工作的存储过程

我个人更喜欢选项 2:

delimiter $$
create procedure movingAvg()
begin
declare mv double;
declare t date;
declare done int default false;
declare cur_t cursor for
select distinct day from symbol
order by day;
declare cur_mv cursor for
select avg(close) from symbol
where day between date_add(t, interval -19 day) and t;
-- Here you define the interval of your MV.
-- If you want a 20-day MV, then the interval is between t-19 and t
declare continue handler for not found set done=true;

open cur_t;
loop_day: loop
fetch cur_t into t;
if not done then
open cur_mv;
fetch cur_mv into mv;
close cur_mv;
update SYMBOL
set moving_average = mv
where day=t;
else
leave loop_day;
end if;
end loop loop_day;
close cur_t;
end;
delimiter ;

关于mysql - MYSQL中收盘价的简单移动平均计算和更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12998146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com