GROUP BY und WHERE UND AVG zusammenbringen

BerndS

Benutzer
Beiträge
10
Hallo
Ich habe mir eine DB in MYSQL Server Version: 5.1.73 aufgebaucht

In die DB werden alle 30Sek Messwerte vom meinem Stromverbrauch und Erzeugung eingetragen.
Damit dies nicht nur nett in einer DB liegt soll es natürlich auch in einer Grafik zum Ausdruck gebracht werden.
Nun möchte ich das aus einem Messwert ein Durchschnitt errechnet wird dies soll gruppiert werden.
Damit die Datenflut nicht zu groß wird soll die gestriegen(ab 00:00Uhr9 und dieheutigen Werte berechnet werden.

Jeder eintrag bekommt mit NOW() einen DATETIME Wert
BSP:
DATUMZEIT | VERBRAUCH | ........
2017-01-04 14:21:49 | 2303
2017-01-04 14:21:19 |1567
.
.
.

Nun die Abfragen für die Einträge von gestern bis heute sowie die Grurpierungen einzel funktionieren.
Zusammengefasst wird mir aber nur die Zeit von gestern 00:00 - 00:55, in 5 Minutenschritten angezeigt.

Hier meine Abfrage

SELECT `datumzeit`, ROUND(AVG(`Verbrauch`),0)
FROM `Strom`
WHERE `datumzeit` > DATE_SUB(curdate(), INTERVAL 1 DAY)
GROUP BY MINUTE(`datumzeit`) DIV 5


Vielleicht könnt ihr mir noch einen kleinen Tipp geben.
Ich denke das man dies innerhalb einer Abfrage lösen könnte ohne eine neue Tabelle zu befüllen und daraus die Werte gruppieren lässt.


Grüße der Arne
 
Werbung:
Alle Spalten im SELECT müssen bei einem GROUP BY entweder gruppiert oder aggregiert werden. Das ist hier nicht korrekt denn `datumzeit` ist nicht gleich MINUTE(`datumzeit`) DIV 5. Jetzt müsste das in der aktuellesten MySQL Version eigentlich auch mit einem Fehler quitiert werden, daher wundert mich das erstmal ein bischen. Kannst du das mal testen?
 
Hallo
danke ukulele für den Tipp,
wie gesagt grundsätzlich funktioniert es mit GROUP BY.

Code:
SELECT `datumzeit`, avg(`Verbrauch`) FROM `Strom` GROUP BY MINUTE(`datumzeit`) DIV 5
Ergibt
Code:
 datumzeit                    avg(`Verbrauch`)    
2016-12-19 21:00:08     779.2456
2016-12-19 21:05:09     760.5430
2016-12-19 21:10:10     738.2764
2016-12-19 21:15:11     741.7650
2016-12-19 21:20:12     754.7535
2016-12-19 20:29:03     785.0709

für die gesamte DB

Hier wird doch `datumzeit` und `Verbrauch` gruppiert in 5Minutenschritten dabei werden die Werte innerhalb der 5Minuten zum Durchschnitt berechnet.

Jetzt fehlt eigentlich nur noch das ich ich dies begrenzen möchte zum Bespiel:
(ohne den avg würden mir alle Werte seit dem 04.01.2017 00:00:02 bekommen......
Mit dem CODE
Code:
SELECT `datumzeit`, avg(`Verbrauch`)
FROM `Strom`
WHERE `datumzeit` > date_sub(curdate(), INTERVAL 1 DAY)

bekomme ich

Code:
datumzeit                    avg(`Verbrauch`)    
2017-01-04 00:00:02     721.9296

Sprich der Durchschnittsverbrauch vom 04.01.2017 00:00:02 bis jetzt



Ich bin etwas verwirrt :confused::confused::confused:
 
Hallo

Leider bin ich auf die Version von MySQL angewiesen da das ganze auf einem qnap nas läuft. Mir ist da auch keine Alternative bekannt außer andere Hardware
 
Werbung:
Ja natürlich kannst du dennoch schonmal den Syntaxfehler bereinigen:
Code:
SELECT MINUTE(`datumzeit`) DIV 5 AS datumzeit, ROUND(AVG(`Verbrauch`),0) AS verbrauch
FROM `Strom`
WHERE `datumzeit` > DATE_SUB(curdate(), INTERVAL 1 DAY)
GROUP BY MINUTE(`datumzeit`) DIV 5
Eventuell lößt das dann auch dein Problem.
 
Zurück
Oben