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,而不是直接计算它。

即。从 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/

相关文章:

database - 从第三个表中引用两个可能表中的一个是不好的做法吗?

mysql - 如何通过网络从sql server导出或导入sql server数据库到mysql server

PHP 创建类似 phpmyadmin 的复制命令

mysql - 如何在 MySQL 中替换具有相似结果的字段

mysql - SQL 按最高金额 "kills divided by deaths"排序

mysql - rails : returning the latest data of fields

mysql - 如何在同一个结果表中包含来自两个查询的信息?

c# - mysql数据库没有连接到c#?

database - DB2 和 Oracle 之间的差异

mysql - 如何设计一组具有动态属性的数据库表?