Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Abfrage auswählen, 5-Minuten-Schritte

Im Folgenden erhalten Sie ein Beispiel, das aus beliebigen Daten mit einem Zeitstempel um :00, :05, :10 ...

besteht
SELECT time, temp_out FROM wmr200 WHERE date(time) = curdate()
    AND mod(minute(time),5) = 0

Ich verwende die Modulo-Funktion, um zu prüfen, ob der Minutenteil der Zeit (0 oder) durch 5 teilbar ist.

Wenn Sie nur ein Ergebnis für jeden Zeitabschnitt benötigen, müssen wir etwas komplexer werden.

SELECT concat(date(time),' ',hour(time),':',round(minute(time)/5,0)*5), 
       min(temp_out), avg(temp_out), max(temp_out) 
FROM wmr200 
GROUP BY date(time), hour(time), round(minute(time)/5,0)*5

Ich habe derzeit keinen Zugriff auf eine MySQL-Instanz, um es auszuprobieren, aber hier ist die Idee. Es gruppiert alle fünf Minuten, indem es nach Datum, Stunde und round(minute(time)/5,0)*5 gruppiert - was die Minute auf die nächsten 5 rundet.

Es wählt den Zeitwert aus, um den es gruppiert werden soll, und das min., avg. und max. temp_out, da ich nicht sicher war, welches davon am besten auf Ihre Situation zutrifft.

Wenn Ihre DB jedoch keine Daten für einen 5-Minuten-Abschnitt (oder einen 30-Minuten-Abschnitt, falls Sie diesen verwenden) enthält, enthält sie möglicherweise immer noch keine Daten für einen Beispielpunkt.