MySQL-Befehle: Differenzen und Mittelwerte
Veröffentlicht: 18.04.2017Differenzen zwischen aufeinanderfolgenden Zeilen
Ziel ist es den täglichen Stromverbrauch der Heizung als Funktion der Zeit darzustellen. Die Eingangstabelle hat zwei Spalten nämlich das Datum (datum) und den Stand des Stromzählers (strom).
Mit folgendem Befehl wird zum einen die Mitte zwischen zwei aufeinanderfolgenden Zeitstempeln in der Spalte "Datum" ermittelt. Zugeordnet wird die Differenz der beiden Einträge in der Spalte Strom geteilt durch die Zeitdifferenz.
SELECT from_unixtime((unix_timestamp(a.datum)+unix_timestamp(b.datum))/2) as meandate, (a.strom-b.strom)/(unix_timestamp(a.datum)-unix_timestamp(b.datum))*86400 as dailystrom FROM heizung_tage AS a, heizung_tage AS b WHERE a.datum>b.datum AND NOT isnull(a.strom) AND NOT isnull(b.strom) GROUP BY b.datum order by meandate
Stundenmittelwert berechnen
Ziel ist es das Stundenmittel eines Sensors t6 zu berechnen:
SELECT AVG(t1), DATE_FORMAT(time, '%Y-%m-%d %H:00:00') as zeit, count(t1) FROM heizung GROUP BY DATE_FORMAT(time, '%Y%m%d%H') order by zeit
Tages-Maximum berechnen
SELECT max(at5) as mat5, DATE_FORMAT(zeit, '%Y-%m-%d') as tag, avg(cntt5) as acntt5 from (SELECT AVG(t5) as at5, count(t5) as cntt5, DATE_FORMAT(time, '%Y-%m-%d %H:%i:00') as zeit, count(t5) FROM heizung where not isnull(t5) GROUP BY unix_timestamp(time) DIV (60*60) order by zeit) as sub_table GROUP BY unix_timestamp(zeit) DIV (24*60*60) order by tag limit 500
Beliebigen Mittelwert berechnen
SELECT t1.datum, (SELECT count(t2.stromdiff) FROM heizung_tage AS t2 WHERE t2.datum BETWEEN t1.datum-INTERVAL 3 DAY AND t1.datum+INTERVAL 3 DAY) AS cnt, (SELECT AVG(t2.stromdiff) FROM heizung_tage AS t2 WHERE t2.datum BETWEEN t1.datum-INTERVAL 3 DAY AND t1.datum+INTERVAL 3 DAY) AS MAVG, stromdiff as sdiff FROM heizung_tage AS t1 WHERE t1.datum>= (SELECT t3.datum FROM heizung_tage AS t3 ORDER BY t3.datum LIMIT 2,1) ORDER BY t1.datum