2016-11-03 9 views
0

Ich habe eine Tabelle, die alle 10 Sekunden mit Daten aktualisiert wird. Ich brauche einen Durchschnitt von 10 Minuten für 24 Stunden für ein bestimmtes Datum.MySQL Durchschnitt für 10 Minuten für 24 Stunden

Ich habe versucht, dies zu tun und die Zeit um 10 Minuten durch PHP erhöhen.

select AVG(active_energy), date_time from energy_readings where date_time between "2016-11-02 00:00:00" and "2016-11-02 00:00:00"+ INTERVAL 10 MINUTE; 

und dann

select AVG(active_energy), date_time from energy_readings where date_time between "2016-11-02 00:10:00" and "2016-11-02 00:10:00"+ INTERVAL 10 MINUTE; 

für 24 Stunden.

Es funktioniert, aber es dauert zu viel auf meinem Datenbankserver.

Gibt es eine einzige mysql-Abfrage, die ich verwenden kann, die mir 10 Minuten für 24 Stunden für einen bestimmten Tag gibt?

Antwort

1

Hier ist eine Methode, eine Zeile für alle 10 Minuten Daten zu erhalten:

select date(date_time), hour(date_time), floor(minute(date_time)/6), 
     avg(active_energy) 
from energy_readings 
where date_time >= '2016-11-02' and datetime < '2016-11-03' 
group by date(date_time), hour(date_time), floor(minute(date_time)/6) 
order by min(date_time); 
+0

‚trunc‘ ist leider nicht verfügbar in MySQL. Versucht, stattdessen das Datum (Minute (Datum_Zeit)/6) zu verwenden. Aber das hat nicht funktioniert .. – NoMadic

+1

Ich denke, Sie können 'DIV' Operator in diesem Fall wie folgt verwenden:' ... Gruppierung nach Datum (Datum_Zeit), Stunde (Datum_Zeit), Minute (Datum_Zeit) DIV 6 ... ' @NoMadic – 1000111

+1

@NoMadic. . . Hoppla. Die richtige Funktion ist 'floor()'. –

Verwandte Themen