sql >> Database teknologi >  >> RDS >> Mysql

kørende gennemsnit i mysql

Din forespørgsel er en måde at lave et løbende gennemsnit på:

SELECT t.*,
       (select avg(speed) from tbl tt where tt.timestamp <= t.timestamp) as avg
FROM tbl t;

Alternativet er at bruge variabler:

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;

Et indeks på tbl(timestamp) bør forbedre ydeevnen yderligere.



  1. Sjovt med (columnstore) komprimering på et meget stort bord – del 3

  2. Hvordan eksporteres tabel som CSV med overskrifter på Postgresql?

  3. MySQL 5.6 DATETIME accepterer ikke millisekunder/mikrosekunder

  4. 2 måder at returnere ASCII-koden for en given karakter i MariaDB