mySQL - min/max aus werteliste
theresa
- datenbank
1 Vinzenz Mai0 theresa
hi leute,
ich steh grad vor einem problem mit einer mySQL-Abfrage.
Es geht um eine Logfileauswertung, und zwar möchte ich
aus meiner Wertetabelle den höchsten bzw. niedrigsten wert auslesen,
der innerhalb eines bestimmten zeitraumes vorgekommen ist.
die schwierigkeit dabei ist, dass ich pro tag bis zu 500 messwerte
(temperatur des serverraumes) habe, und nur den höchsten bzw. niedrigsten wert des tages brauche. noch dazu sollte das idealerweise mit einem von-bis datum funktionieren.
ich hab keine ahnung wie ich da ansetzen soll...
hier die struktur meiner tabelle:
+---+----------+------+---------------------+
|id | messwert | raum | timestamp |
+---+----------+------+---------------------+
|1 | 13.3 | 1 | 2008-09-09 13:12:30 |
+---+----------+------+---------------------+
|2 | 13.4 | 1 | 2008-09-09 13:15:10 |
+---+----------+------+---------------------+
|3 | 14.1 | 2 | 2008-09-10 14:13:00 |
+---+----------+------+---------------------+
bin für jede hilfe dankbar!!
eure theresa
Hallo,
die schwierigkeit dabei ist, dass ich pro tag bis zu 500 messwerte
(temperatur des serverraumes) habe, und nur den höchsten bzw. niedrigsten wert des tages brauche. noch dazu sollte das idealerweise mit einem von-bis datum funktionieren.
ich hab keine ahnung wie ich da ansetzen soll...
MIN und MAX sind schon mal zwei gute Ansätze, zwischen heißt auf englisch BETWEEN,
+---+----------+------+---------------------+
|id | messwert | raum | timestamp |
+---+----------+------+---------------------+
|1 | 13.3 | 1 | 2008-09-09 13:12:30 |
+---+----------+------+---------------------+
|2 | 13.4 | 1 | 2008-09-09 13:15:10 |
+---+----------+------+---------------------+
|3 | 14.1 | 2 | 2008-09-10 14:13:00 |
+---+----------+------+---------------------+
also schauen wir nach, was wir im Handbuchabschnitt "Funktionen und Operatoren" alles so finden:
Dabei ist zu beachten, dass MIN und MAX Aggregatsfunktionen sind, die mit der GROUP-BY-Klausel verwendet werden müssen, falls es nicht aggregierte Spalten gibt. Soweit ich Dich verstanden habe ist Deine Anforderung wie folgt:
Gib mir
den minimalen Messwert,
den maximalen Messwert,
und den Raum
aus
meiner Tabelle
wobei nur die Werte berücksichtigt werden sollen,
die zwischen Anfangs- und Endwert liegen,
gruppiert nach
den Räumen (d.h. je Raum einen Datensatz mit dem minimalen und maximalen Messwert)
optional noch
sortiert
wie gefordert
Das kannst Du 1:1 in ein SQL-Statement umsetzen, das selbst MySQL 3.23 noch versteht.
Freundliche Grüße
Vinzenz
hi vinzenz!
danke für deine sehr verständliche erklärung,
habs jetzt auch nachvollziehbar verstanden.
eine frage hab ich dabei aber noch:
kann ich bereits im sql-statement irgendwie angeben,
dass ich nur einen messwert pro tag bzw. datum haben möchte?
ich will quasi alle niedrigsten werte der jeweiligen tage vom 1.-9.9.2008,
sodass pro raum und tag nur ein wert rauskommt?
mit einem tag bring ichs ja schon hin so...
danke, lg, therasa
Hallo,
eine frage hab ich dabei aber noch:
kann ich bereits im sql-statement irgendwie angeben,
dass ich nur einen messwert pro tag bzw. datum haben möchte?
ich will quasi alle niedrigsten werte der jeweiligen tage vom 1.-9.9.2008,
sodass pro raum und tag nur ein wert rauskommt?
ja klar, gruppiere zusätzlich noch nach dem Taganteil Deines Timestamps, DATE() sollte Dir dabei helfen, wenn Du nicht gerade eine antiquierte MySQL-Version hast.
Freundliche Grüße
Vinzenz