wieder mal Thermometerauswertung

sundancer

Neuer Benutzer
Beiträge
2
Hallo in die Runde,

ich bin SQL-Neuling und verwende MySQL auf einem Linux-System.
Ich habe eine Tabelle für Temperaturwerte mit folgendem Aufbau:
id | datum | zeit | auss

"auss" steht für eine Aussentemperatur.

Ich möchte den Min- und Max-Wert für den Vortag abfragen.
Das ist erstmal kein Problem.
Möchte ich jedoch den zugehörigen Wert für die Zeit oder die ID mit anzeigen, bin ich leider überfordert.

Kann mir evtl. jemand helfen?

Die bisherige Abfrage lautet:
select datum, min(auss) as minwert, max(auss) as maxwert from Temperaturen group by datum;

Mein erster Versuch sollte nur die Zeit zum jeweiligen Eintrag hinzufügen, führt jedoch zu einem Fehler:
select datum, zeit from Temperaturen (select min(auss) as minwert, max(auss) as maxwert from Temperaturen group by datum);

Natürlich können der Min- und Max-Wert mehrmals in der Tabelle auftreten, da in kurzen Intervallen gemessen wird.
Eindeutig ist die Kombination aus Datum und Zeit oder auch der ID-Wert.

Vielen Dank für Eure Mühe!
Gruß sundancer
 
Werbung:
Du hast das schwerste schon geschafft. Wenn Dir klar ist, dass es mehrere Treffer geben kann:
Nimm einfach Deine funktionierende Abfrage der Minima , Maxima je Datum und joine alle 3 Werte erneut mit der Tabelle Temperaturen.
 
Hallo dabadepdu,

Danke für die Antwort.
Das ist aber genau mein Problem. Was soll ich den joinen?
Alle Werte sind mehrdeutig, wenn es mehrere Werte in der Tabelle gibt.
Ich müsste also den ersten oder den letzten der Mehrfachwerte nehmen, weiß aber nicht, wie ich das mache.

Gruß sundancer
 
Werbung:
Also ein Join ist nicht so schwer, wie eine Aggregation -dachte ich.

Du kennst Joins?
Code:
select p.vorname, a.anschrift from person p join adresse a on p.id = a.person_id;
Das ist ein Beispiel mit einem Join über ein Kriterium. Es geht auch mehr, wie bei Dir nötig.

Dein Ausgangsstatement liefert die interessanten Werte Deiner Wetterdaten, Maximalwerte, Peaks, ..
Die Aggregat Funktionen in SQL haben naturgegeben die Schwäche, dass sie ihre aggregierten Daten nur liefern können, wenn "Randinformationen" nicht mit dargestellt werden. Sonst würde das Aggregat wieder "verwässert" und seine Aussagekraft und Kompaktheit verlieren.

Ausgehend davon:
Code:
select datum, min(auss) as minwert, max(auss) as maxwert from Temperaturen group by datum;
kannst Du bspw die Minimaltemperaturen so anreichern:
Code:
select agg.datum. agg.minwert, temp.id, temp.zeit from
(select datum, min(auss) as minwert from Temperaturen group by datum) agg
join Temperaturen temp on (agg.datum, agg.minwert) = (temp.datum, temp.auss)
Es gibt viele weitere Möglichkeiten, natürlich analog das Verfahren für Maxima, beides zusammen usw..
Die Schreibweise 'join Temperaturen temp on (agg.datum, agg.minwert) = (temp.datum, temp.auss)' ist dabei ein andere -wie ich finde schönere- Form von
'join Temperaturen temp on agg.datum = temp.datum and agg.minwert = temp.auss'
 
Zurück
Oben