mysql - 计算移动平均线 MySQL?

标签 mysql sql database

美好的一天,

我使用以下代码来计算 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/

相关文章:

php - SQL查询帮助请求

PHP PDO 将行查询插入 MySQL

mysql - 在 heroku 上上传 mysql 转储

php - 如何从 Excel 中转义重复值并尝试插入到 Codeigniter 中的数据库中?

sql - 该查询是什么意思?

sql - 合并连续的日期

php - 当连接表是一对多时如何进行 SQL 查询

MySQL:将数据从一个表移动到具有不同模式的另一个表

mysql - 使用子组构建组织

sql-server - 微软 SQL : How can I Filter Database after connecting web hosting