我可以使用一些帮助(最好是虚拟指南)来更新下表:
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 天移动平均线。
我已尽我所能执行此处的步骤:
我的查询是这样的:
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 值。
我还看了这个答案: 如何在 MySQL 中计算多个移动平均线
但是,我不确定我需要对我的表的回复进行什么更改。
任何帮助表示赞赏。