MIN-Wert aus Daten-Teilbereich

SQL:
SELECT * FROM weather_data WHERE temperatur = (SELECT MIN(temperatur) FROM weather_data WHERE zeitstempel >='$unix_day_start')

Das ist mein Befehl, und den hattest Du als korrekt klassifiziert. Den benutze ich. Und der liefert mir einen Wert zurück, bei dem der zeitstempel KLEINER ist als die Vorgabe, was aufgrund des WHERE Kriteriums nicht sein sollte.
 
Werbung:
Mit anderen Worten, ich will nur die Minimaltemperatur des Tages. Also berechne ich den Unix-Timestamp des Tagesanfangs und sage SQL, dass sie bitte die MIN Temperatur nur in den Werten suchen soll, deren Unix-Timestamp größer ist als der Tagesanfang.
 
Okay. Dennoch danke für deine Antworten und Bemühen. Ich habe gelernt a) der Befehl ist erstmal richtig und b) auch wenn er falsch ist, kommt "irgendwas" zurück und kein Fehler (wer um Himmels Willen programmiert sowas, es ist besser nichts zu sagen als etwas falsches) und c) MySQL ist offenbar unzuverlässig und ich sollte es besser nicht benutzen.

Danke für die Unterstützung.
 
Da ich nicht ganz glauben konnte, dass eine zigtausendfach eingesetzte Datenbank so krasse Fehler "inhärent" produziert, bin ich davon ausgegangen, dass mein Query nach wie vor falsch ist.
Ich habe nun den folgenden Befehl verwendet, der funktioniert. Er arbeitet anders, vermeidet das MAX() und erzeugt stattdessen erstmal eine Tabelle mit allen Zeilen, deren Zeitstempel größer als die Vorgabe ist. Diese Liste wird mit ORDER BY nach der Temperatur sortiert und zwar entweder aufsteigend ("ASC") oder absteigend ("DESC"). Mit Limit 1 picke ich mir einfach die erste Zeile dieser Tabelle heraus, die dann den gewünschten Wert mit der niedrigsten oder höchsten Temperatur enthält.

Ich bin immer noch zu blöd zu verstehen, was an meinem vorherigen Befehl falsch war, aber dieser hier funktioniert jetzt jedenfalls:

Für den Minimalwert:
SQL:
$SELECT * FROM `weather_data` WHERE zeitstempel>='$unix_day_start' ORDER BY temperatur ASC LIMIT 1;

Für den Maximalwert:
SQL:
$SELECT * FROM `weather_data` WHERE zeitstempel>='$unix_day_start' ORDER BY temperatur DESC LIMIT 1;

Die Variable $unix_day_start enthält jeweils den Unix-Timestamp des Tagesanfangs des aktuellen Tages.
 
Werbung:
Vielen Dank für Dein Feedback. Es ist eigentlich sehr simpel. Die Tabelle enthält eine Vielzahl an Variablen (Wetterdaten), aber nur Temperatur und Zeitstempel sind für dieses Thema relevant.
Die Tabelle erhält alle 20 Sekunden einen neuen Messwert-Eintrag, umfasst also buchstäblich tausende Datensätze. Ich will letztlich die maximale Temperatur des Tages wissen. Das ist der maximale Wert der Spalte Temperatur, aber NUR für jene Einträge, bei denen die Spalte Zeitstempel größer als ein Wert ist (z.B. größer als 1674169200, das wäre der Unix-Zeitstempel für heute Nacht um Mitternacht gewesen). Mehr ist das nicht ..

Die Aufgabe ist also: Liefere die Row mit der maximalen (oder minimalen) Temperatur aus der Untergruppe aller Daten, bei denen der Zeitstempel größer ist als 1674169200.
(in Wahrheit ist der Zeitstempel natürlich eine PHP-Variable, also nicht 1674169200, sondern $unix_day_start)

Das ist die Struktur der Tabelle:
Bildschirmfoto 2023-01-20 um 18.23.17.png

PS: mittlerweile habe ich auch herausgefunden, dass es nicht nur EINEN Eintrag mit EINER maximalen Temperatur geben muss, denn es könnte ja eine halbe Stunde lang 30 Grad haben, dann ist nicht genau definiert, welchen Eintrag mit unterschiedlichen Zeiten die MAX() Funktion liefert, denn es gibt dann mehrere Tabelleneinträge mit der (selben) maximalen Temperatur.
 
Zurück
Oben