SQL Abfrage mit Unterbedingung für Zeilenauswahl



  • Hi,

    ich hab folgendes Problem: in meiner SQL-Tabelle stehen zahlreiche Einträge mit den Spalten A - Z.
    Jetzt möchte ich einen Query erstellen, der mir alle Einträge meiner Tabelle liefert. Wenn aber der Wert von A mehrmals vorkommt, möchte ich nur den Eintrag haben, bei dem der Wert von Z am größten ist.
    Hab schon ein bissl probiert und gegooglet, aber komm nicht weiter...

    Update:
    Eine Möglichkeit hab ich gefunden:

    SELECT TblA.*
    FROM TblA
    
    RIGHT JOIN (SELECT A, MAX(Z) AS 'Z' FROM TblA GROUP BY A) TblB
    ON
      (TblA.A = TblB.A OR (TblA.A IS NULL AND TblB.A IS NULL)) AND
      (TblA.Z = TblB.Z OR (TblA.Z IS NULL AND TblB.Z IS NULL))
    

    Aber geht das noch eleganter? Die Gruppierung erfolgt nämlich mit 4 Spalten, das ist ne ganz schöne schreiberei...



  • SELECT *
      FROM tblA a1
     WHERE Z = (SELECT MAX(Z)
                  FROM tblA a2
                 WHERE a1.A = a2.A)
    


  • Nene, das Maximum von Z ist bei allen As unterschiedlich.



  • dochdoch. Dann schau mal genau hin. Das MAX(Z) wird für jedes a1.A ermittelt. "Correlated subquery" nennt sich das.



  • Ah, das Problem könnte dabei sein, dass ich das Z-Feld erst bei einem Probanden gefüllt hab, bei den anderen steht dort NULL drin und deshalb trifft die Bedingung nicht....


Anmelden zum Antworten