Vor GROUP BY absteigend sortieren?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Vor GROUP BY absteigend sortieren?

    Hallo,

    angenommen ich habe eine Tabelle wie die Folgende zur Speicherung irgendwelcher Messdaten:


    Ich möchte aus so einer Tabelle gerne von 3 unterschiedlichen Sensoren jeweils den neusten Datensatz abfragen, der den Zeitpunkt der Messung sowie 2 Werte enthält. Es steht allerdings nicht fest, von welchen 3 Sensoren jeweils der neuste Datensatz abgefragt werden soll, sondern es sollen die neusten Datensätze der Sensoren sein, zu denen die neusten Ergebnisse vorliegen. Ist irgendwie blöd zu erklären, ich weiß... Welche 3 Datensätze das in der Beispieltabelle wären, habe ich durch gelbe Hinterlegung kenntlich gemacht.

    Ich habe schon an folgende Abfrage gedacht:
    Code:
    SELECT DatensatzID, SensorID, MAX(Zeit) AS Zeitpunkt, WertA, WertB FROM tabelle GROUP BY SensorID ORDER BY Zeitpunkt DESC LIMIT 3
    Tatsächlich erhalte ich zu 3 unterschiedlichen Sensoren den Zeitpunkt der neusten Messung. Es werden auch die richtigen Sensoren ausgewählt, sprich die mit den neusten Ergebnissen. Leider gehören aber die Angaben zu WertA und WertB nicht zum Datensatz mit MAX(Zeit), sondern zu dem Datensatz mit MIN(Zeit). Die Datensätze, die mit der Abfrage aggregiert werden, sind also "zusammengewürfelt".
    Daher kam ich auf die Idee, dass man die Daten zunächst absteigend nach Zeit sortieren müsste, ehe man GROUP BY anwendet, um so die neusten Werte zu erhalten, aber das funktioniert nicht.

    Nachtrag: Es geht um MySQL.

    Hat jemand einen Rat für dieses kniffelige Problem? Ich glaube ich stehe irgendwie auf dem Schlauch!

    Danke euch schon mal!

    Grüße,
    micromumpitz
    Zuletzt geändert von micromumpitz; 29.08.2009, 15:27.

  • #2
    Zitat von micromumpitz Beitrag anzeigen
    Leider gehören aber die Angaben zu WertA und WertB nicht zum Datensatz mit MAX(Zeit), sondern zu dem Datensatz mit MIN(Zeit). Die Datensätze, die mit der Abfrage aggregiert werden, sind also "zusammengewürfelt".
    Natürlich sind sie das.
    Spalten zu selektieren, über die nicht gruppiert wurde, ist in "richtigem" SQL unzulässig. MySQL erlaubt es zwar stillschweigend - liefert dann aber für diese Spalten "zufällige" Ergebnisse, das ist auch so dokumentiert.

    Daher kam ich auf die Idee, dass man die Daten zunächst absteigend nach Zeit sortieren müsste, ehe man GROUP BY anwendet, um so die neusten Werte zu erhalten, aber das funktioniert nicht.
    Wann welcher "Teil" eines Statements abgearbeitet wird, ist genau vorgegeben; und Gruppierung findet vor Sortierung statt.

    Für dein Vorhaben bietet sich ein korrelierte Unterabfrage an; ggf. auch ein JOIN.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hallo,

      dein Problem entspricht dieser Common Query: The Rows Holding the Group-wise Maximum of a Certain Column

      Gruß,

      Anja
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Hallo,

        danke für die Antworten! Dein Link, Anja, ist natürlich genau das, wonach ich gesucht hatte! Perfekt!
        Ich kann mich höchstens ärgern, dass ich das Beispiel im Manual nicht selbst gefunden habe...

        Gruß & danke!
        MicroMumpitz

        Kommentar

        Lädt...
        X