sql >> Databasteknik >  >> RDS >> Mysql

löpande medelvärde i mysql

Din fråga är ett sätt att göra ett löpande medelvärde:

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

Alternativet är att använda 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;

Ett index på tbl(timestamp) bör förbättra prestandan ytterligare.



  1. Välj alla duplicerade rader baserat på en eller två kolumner?

  2. Hur returnerar jag en jsonb-array och en array av objekt från mina data?

  3. Parameteriserade frågor PHP/MySQL

  4. SQL koppla 2 tabeller till 1 tabell