Letzter Eintrag des Tages aus MySQL DB auslesen
Hallo zusammen,
ich möchte aus einer MySQL DB Tabelle immer den letzten Tageswert auslesen:
So sollte das Ergebnis dann aussehen:
Bisher habe ich:
Wer kann mir helfen ... ich komme nicht weiter.
ich möchte aus einer MySQL DB Tabelle immer den letzten Tageswert auslesen:
"TIMESTAMP" "DEVICE" "TYPE" "EVENT" "READING" "VALUE" "UNIT"
"2023-05-03 20:22:05" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 10.9" "energytoday" "10.9" \N
"2023-05-03 19:20:00" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 10.8" "energytoday" "10.8" \N
"2023-05-03 18:42:59" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 10.7" "energytoday" "10.7" \N
"2023-05-03 18:21:11" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 10.6" "energytoday" "10.6" \N
"2023-05-03 18:06:17" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 10.5" "energytoday" "10.5" \N
"2023-05-03 17:54:08" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 10.4" "energytoday" "10.4" \N
"2023-05-02 19:39:25" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.8" "energytoday" "8.8" \N
"2023-05-02 18:58:31" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.7" "energytoday" "8.7" \N
"2023-05-02 18:32:11" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.6" "energytoday" "8.6" \N
"2023-05-02 18:13:53" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.5" "energytoday" "8.5" \N
"2023-05-02 18:02:33" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.4" "energytoday" "8.4" \N
"2023-05-01 20:35:47" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.9" "energytoday" "8.9" \N
"2023-05-01 19:15:37" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.8" "energytoday" "8.8" \N
"2023-05-01 18:46:37" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.7" "energytoday" "8.7" \N
"2023-05-01 18:12:25" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.6" "energytoday" "8.6" \N
"2023-05-01 17:54:51" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.5" "energytoday" "8.5" \N
"2023-04-30 19:40:28" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 9.8" "energytoday" "9.8" \N
"2023-04-30 19:00:20" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 9.7" "energytoday" "9.7" \N
"2023-04-30 18:32:21" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 9.6" "energytoday" "9.6" \N
"2023-04-30 18:11:30" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 9.5" "energytoday" "9.5" \N
"2023-04-30 17:57:58" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 9.4" "energytoday" "9.4" \N
So sollte das Ergebnis dann aussehen:
"TIMESTAMP" "DEVICE" "TYPE" "EVENT" "READING" "VALUE" "UNIT"
"2023-05-03 20:22:05" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 10.9" "energytoday" "10.9" \N
"2023-05-02 19:39:25" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.8" "energytoday" "8.8" \N
"2023-05-01 20:35:47" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 8.9" "energytoday" "8.9" \N
"2023-04-30 19:40:28" "MQTT2_growatt_931744" "MQTT2_DEVICE" "energytoday: 9.8" "energytoday" "9.8" \N
Bisher habe ich:
SELECT *
FROM history WHERE DEVICE = "MQTT2_growatt_931744" AND READING = "energytoday"
ORDER BY TIMESTAMP DESC
Wer kann mir helfen ... ich komme nicht weiter.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7011413765
Url: https://administrator.de/forum/letzter-eintrag-des-tages-aus-mysql-db-auslesen-7011413765.html
Ausgedruckt am: 01.06.2025 um 09:06 Uhr
9 Kommentare
Neuester Kommentar
Ah jetzt verstanden.
Es gibt mehrere Wege das zu erreichen, der aus meiner Sicht einfachste wäre mit einer Window Funktion, hier mal als Beispiel:
Es kommt leider etwas auf deine MySQL Version an ob die das kann, möglich. Auch ist convert(DATE,TIMESTAMP) jetzt MSSQL Syntax, das müsste man bestimmt auf MySQL übersetzen. Der Rest läuft entweder oder MySQL kann das nicht oder ist zu alt.
Edit: ORDER BY TIMESTAMP DESC in t ergänzt.
Es gibt mehrere Wege das zu erreichen, der aus meiner Sicht einfachste wäre mit einer Window Funktion, hier mal als Beispiel:
WITH t AS (
SELECT ROW_NUMBER() OVER (PARTITION BY convert(DATE,TIMESTAMP) ORDER BY TIMESTAMP DESC) AS zeile,*
FROM history WHERE DEVICE = "MQTT2_growatt_931744" AND READING = "energytoday"
)
SELECT *
FROM t
WHERE zeile = 1
ORDER BY TIMESTAMP DESC
Edit: ORDER BY TIMESTAMP DESC in t ergänzt.
MariaDB Manual sagt:
WITH und ROW_NUMBER() werden von MariaDB supported und 10.5.19 ist aktuell, sollte also gehen.
CONVERT(expr, type)
das hätte man jetzt auch noch selber Googlen können, daraus folgt:WITH t AS (
SELECT ROW_NUMBER() OVER (PARTITION BY convert(TIMESTAMP,DATE) ORDER BY TIMESTAMP DESC) AS zeile,*
FROM history WHERE DEVICE = "MQTT2_growatt_931744" AND READING = "energytoday"
)
SELECT *
FROM t
WHERE zeile = 1
ORDER BY TIMESTAMP DESC
Das darf so eigentlich nicht funktionieren: Bei Verwendung von GROUP BY müssen alle Spalten im GROUP BY aufgeführt werden oder im Select-Teil aggregiert werden. Von MariaDB würde ich an dieser Stelle einen Fehler erwarten, ähnlich wie
Msg 8120, Level 16, State 1, Line 4
Die Device-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.
Entweder erkennt MariaDB hier das im WHERE-Teil besagte Spalten auf einen Wert eingegrenzt werden oder, was ich eher glaube, hier kommt altes MySQL Verhalten zum Vorschein. Eigentlich hat MySQL das nach Jahrzehnten mal gefixt, früher kam dann einfach "irgendwas" raus.Die Device-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.