sql >> Database >  >> RDS >> Mysql

lopend gemiddelde in mysql

Uw zoekopdracht is een manier om een ​​lopend gemiddelde te berekenen:

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

Het alternatief is om variabelen te gebruiken:

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;

Een index op tbl(timestamp) zou de prestaties verder moeten verbeteren.



  1. Hoe bereken je dagen tussen twee datums in PHP?

  2. Hybride OLTP/Analytics-databaseworkloads in Galera-cluster met behulp van asynchrone slaves

  3. Tips voor het leveren van MySQL-databaseprestaties - deel één

  4. Oracle - Een alleen-lezen gebruiker maken