Hendrich.org

MySQL-Befehle: Differenzen und Mittelwerte

Veröffentlicht: 18.04.2017

Differenzen 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