theresa: mySQL - min/max aus werteliste

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

  1. 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

    1. 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

      1. 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