一尘不染

计算移动平均数MySQL?

mysql

美好的一天,

我正在使用以下代码来计算9天移动平均线。

SELECT SUM(close)
FROM tbl
WHERE date <= '2002-07-05'
AND name_id = 2
ORDER BY date DESC
LIMIT 9

但这是行不通的,因为它会在调用限制之前先计算所有返回的字段。换句话说,它将计算该日期之前或等于该日期的所有关闭时间,而不仅仅是最后9个。

因此,我需要从返回的选择中计算出SUM,而不是直接计算出来。

IE浏览器 从SELECT中选择SUM …

现在我将如何去做,这是非常昂贵的还是有更好的方法?


阅读 763

收藏
2020-05-17

共1个答案

一尘不染

使用类似

SELECT 
  sum(close) as sum,
  avg(close) as average
FROM (
    SELECT 
      (close)
    FROM 
      tbl
    WHERE 
      date <= '2002-07-05'
      AND name_id = 2
    ORDER BY 
      date DESC
    LIMIT 9 ) temp

内查询返回的所有过滤的行desc顺序,然后avgsum向上的行返回。

之所以query被你给不工作是由于该事实sum,首先计算和LIMIT后子句应用sum已经计算出来了,给你的sum所有行目前的

2020-05-17