美好的一天,
我正在使用以下代码计算 9 天移动平均线。
SELECT SUM(close)
FROM tbl
WHERE date <= '2002-07-05'
AND name_id = 2
ORDER BY date DESC
LIMIT 9
但它不起作用,因为它在调用 limit 之前先计算所有返回的字段。换句话说,它将计算该日期之前或等于该日期的所有收盘价,而不仅仅是最后 9 个。
所以我需要从返回的选择中计算 SUM,而不是直接计算它。
即。从 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/16121023/