MySQL Max und Min Wert der letzten 24h

gmhome

Grünschnabel
Hallo zusammen,

in folgende Tabelle:
CREATE DATABASE weather_station;
USE weather_station;
CREATE TABLE temperature (
id int NOT NULL AUTO_INCREMENT,
sender_id VARCHAR(20),
datum DATETIME,
temp FLOAT,
humidity FLOAT,
PRIMARY KEY(id)
);
wird alle 3 Minuten ein Temperaturwert geschrieben.
Ich möchte nun die Min und Max-Temperatur mit jeweils zugehörigem datum für den heutigen Tag auslesen, um am Ende eine Ausgabe von z.B. Max-Temp: 5°C um 12:35 Uhr machen zu können.

Mit folgender sql bekomme ich min und max aller gespeicherter Temperaturwerte:

$sql_max = "SELECT datum, temp FROM temperature WHERE temp=(select max(temp) FROM temperature)";
$sql_min = "SELECT datum, temp FROM temperature WHERE temp=(select min(temp) FROM temperature)";

leider funktioniert eine weitere Einschränkung mit "WHERE datum < '$heut'" nicht.

Hat irgendjemand eine Idee, wie ich die weitere Einschränkung auf einen festgelegten Datumsbereich hinbekomme?

Vielen Dank schon mal im Voraus!
 
Der Where ist schon ein guter Ansatz.
1) der wehre muss ins Sub ins Subselect und ins Haubtselect
2) Von PHP (Unix-Timestamp) zu MySQL Datum muss konvertiert werden.
3) Wenn immer von Heute ausgegangen wird, dann brauchst du die PHP-Variable $heut gar nicht

Frage: Willst du die letzten 24 Stunden oder willst du heute ab Mitternacht?
 
Vielen Dank für die schnelle Antwort, aber ich stehe etwas auf dem Schlauch.
Kannst Du mir vielleicht ein kurzes Beispiel posten?:(
 
Sobald du meine Frage beantwortet hast. Denn diese ist wichtig für die Berechnung
Frage: Willst du die letzten 24 Stunden oder willst du heute ab Mitternacht?
Letzten 24Stunden -> Bedeutet jetzt (11:19) alles von 6.2.2018 11:19 bis 7.2.2018 11:19
Ab Mitternacht -> Bedeutet alles von 7.2.2018 00:00 bis 7.2.2018 23:59
 
Hi Yaslaw,

vielen Dank nochmal. Da stelle ich doch mal wieder fest, dass ich offensichtlich keinen Plan von SQL habe...
Werde mal versuchen den code in php zu packen und auszulesen, aber das stellt mich schon vor einige Herausforderungen.

Muss ich "= Date(now())" jetzt noch durch "> $date_mitternacht" ersetzten?
kann ich mit $row = $output->fetch_assoc() dann als "$row[ma.temp]" und "$row[ma.datum]" auslesen?
 
Nö. das geht genau so.
date() extrahiert das Datum aus einem Zeitstempel (Datum + Uhrzeit)
now() Gibt den Aktuellen Zeitstempel zurück.

Somit vergleiche ich das Datum heute mit dem Datum aus der Messung. Das ganze ohne Uhrzeiten.

Da als Resultat der ganze Eintrag aus der Temperaturtabelle zurückgegeben wird, kannst du einfach diese Werte auslesen.
Das Feld Datum als Rückgabewert entspricht dem Feld Datum in der Tabelle. Also ein Zeitstempel
PHP:
$temp = $row['temp'];
$date = $row['datum']

Schau dir auch den Test auf SQLFiddle an, den ich dafür erstellt habe: http://sqlfiddle.com/#!9/0df222/5
2018-02-07_115845.jpg
 
Sorry für die dilettantische Frage...
Hatte es gerade durch Trial and Error auch herausgefunden, allerdings bekomme ich mit meiner Datenbasis mehr als eine Ausgabe wenn mehrere gleiche Temperaturwerte im Zeitraum vorhanden sind. Kann man das noch mit Order Desc Linie 1 einschränken?
 
Zurück