Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

média de execução no mysql


Sua consulta é uma maneira de fazer uma média em execução:
SELECT t.*,
       (select avg(speed) from tbl tt where tt.timestamp <= t.timestamp) as avg
FROM tbl t;

A alternativa é usar variáveis:
select t.*, (sum_speed / cnt) as running_avg_speed
from (select t.*, (@rn := @rn + 1) as cnt, (@s := @s + speed) as sum_speed
      from tbl t cross join
           (select @rn := 0, @s := 0) params
      order by timestamp
     ) t;

Um índice em tbl(timestamp) deve melhorar ainda mais o desempenho.