美好的一天,
我使用以下代码来计算 9 天移动平均线。
SELECT SUM(close)
FROM tbl
WHERE date <= '2002-07-05'
AND name_id = 2
ORDER BY date DESC
LIMIT 9
但是它不起作用,因为它在调用 limit 之前首先计算所有返回的字段。换句话说,它将计算该日期之前或等于该日期的所有收盘价,而不仅仅是最后 9 个收盘价。
所以我需要根据返回的选择计算 SUM,而不是直接计算。
IE。从 SELECT 中选择 SUM...
现在我该怎么做?它的成本是否很高或者是否有更好的方法?
最佳答案
如果您想要每个日期的移动平均值,请尝试以下操作:
SELECT date, SUM(close),
(select avg(close) from tbl t2 where t2.name_id = t.name_id and datediff(t2.date, t.date) <= 9
) as mvgAvg
FROM tbl t
WHERE date <= '2002-07-05' and
name_id = 2
GROUP BY date
ORDER BY date DESC
它使用相关子查询来计算 9 个值的平均值。
关于mysql - 计算移动平均线 MySQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20902986/