Neueste Einträge einer SQL Tabelle

mixmaxi

Neuer Benutzer
Beiträge
4
Hallo ich sitze jetzt schon länger an dieser Abfrage und komm nicht weiter. Ich habe drei Tabellen. In einer senden verschiedene Testsender alle 5 Minuten ihre Temperatur. Manchmal sendet er sie aber auch nicht mit. Ich möchte immer den neuesten Eintrag von jedem einzelnen Testsender. In einer weiteren Tabelle stehen die Ortskoordinaten zu den jeweiligen Testsendern. In der dritten Tabelle steht ein Farbcode zu jeder Temperatur. Mein Code sah bis jetzt so aus und er hat auch mal funktioniert aber jetzt bekomm ich nur den allerneuesten Eintrag. cube_temp ist die Tablle, wo die Sendedaten der Testsender hinterlegt sind und sensor_cube_table die Ortskoordinaten.

SELECT *
FROM cube_temp
LEFT JOIN sensor_cube_table
ON cube_temp.TransmitterId = sensor_cube_table.CubeId
LEFT JOIN Color
ON cube_temp.Temperature = Color.Temperature
WHERE cube_temp.Temperature IS NOT NULL
AND cube_temp.DateTime = (SELECT max(cube_temp.DateTime)
FROM cube_temp, sensor_cube_table
WHERE cube_temp.TransmitterId = sensor_cube_table.CubeId
AND cube_temp.Temperature IS NOT NULL)

Danke schon einmal für eure Hilfe
 
Werbung:
Oke beschränken wir uns nur auf eine Tablle, die cube_temp. Die Anderen sind egal erst einmal. Die Group By Funktion gibt immer die falschen Datensätzen aus. Zwar kann ich durch max(DateTime) den aktuellsten Sendezeitpunkt von jedem testsender ermitteln aber die dazugehörigen Spalten erhalte ich nicht, sondern x-beliebige:

SELECT *, max(cube_temp.DateTime)
FROM cube_temp
Inner JOIN sensor_cube_table
ON cube_temp.TransmitterId = sensor_cube_table.CubeId
Group By cube_temp.TransmitterId
 
Oke beschränken wir uns nur auf eine Tablle, die cube_temp. Die Anderen sind egal erst einmal. Die Group By Funktion gibt immer die falschen Datensätzen aus. Zwar kann ich durch max(DateTime) den aktuellsten Sendezeitpunkt von jedem testsender ermitteln aber die dazugehörigen Spalten erhalte ich nicht, sondern x-beliebige:

SELECT *, max(cube_temp.DateTime)
FROM cube_temp
Inner JOIN sensor_cube_table
ON cube_temp.TransmitterId = sensor_cube_table.CubeId
Group By cube_temp.TransmitterId

Ja. Ist ein Bug von MySQL. Es akzeptiert, daß in Aggregationen nicht alle Spalten im Resultat entweder aggregiert oder gruppiert sein müssen. Warte bitte auf die nächste große Version von MySQL, die wird Dir bei diesem Select einen Syntaxfehler liefern. Wowereit.
 
Gibt es keinen anderen Lösungsvorschlag?

Ja, sicher, viele. Siehe #2.

Code:
test=# create table messung(sensor int, ts timestamp, wert int);
CREATE TABLE
test=*# select sensor, max(ts) from messung group by sensor;
 sensor | max
--------+-----
(0 rows)

test=*# select * from messung where (sensor,ts) in (select sensor, max(ts) from messung group by sensor);
 sensor | ts | wert
--------+----+------
(0 rows)

Das wäre einer.
 
Werbung:
Zurück
Oben