zerberos Geschrieben 12. November 2008 Geschrieben 12. November 2008 Hallo, ich habe z.B. folgende Tabelle Feld1 | Feld2 | VERSION | -------------------------- d1 | aaa | 1 | d1 | aaa | 2 | d2 | bbb | 1 | Jetzt möchte ich eine Abfrage machen, die mir jeweils den Datensatz mit der höchten Version zurückgibt Bei d1 wäre das also der Datensatz mit der Version 2 und bei d2 mit Version 1 Die AAbfrage würde mir also in diesem Beispiel 2 Datensätze zurückgeben Wie mach ich das?
0815FIA Geschrieben 12. November 2008 Geschrieben 12. November 2008 (bearbeitet) schau dir mal aggregatfunktionen an Bearbeitet 12. November 2008 von 0815FIA
zerberos Geschrieben 12. November 2008 Autor Geschrieben 12. November 2008 schau dir mal aggregatfunktionen an Ich hatte schon folgendes probiert was aber anscheinend nicht geht WHERE VERSION=MAX(VERSION)
0815FIA Geschrieben 12. November 2008 Geschrieben 12. November 2008 (bearbeitet) aggregatfunktionen kannst du in der WHERE klausel nicht direkt verwenden. Dazu benötigst du ein subselect. versuch mal: SELECT feld2 FROM tabelle WHERE version=(SELECT MAX(version) from tabelle WHERE feld1=d1) AND feld1=d1; Bearbeitet 12. November 2008 von 0815FIA
0815FIA Geschrieben 12. November 2008 Geschrieben 12. November 2008 ups, glatt die softquotes vergessen -.-, sry SELECT feld2 FROM tabelle WHERE version=(SELECT MAX(version) FROM tabelle WHERE feld1="d1") AND feld1="d1";
Astra-Ben Geschrieben 12. November 2008 Geschrieben 12. November 2008 (bearbeitet) ups, glatt die softquotes vergessen -.-, sry SELECT feld2 FROM tabelle WHERE version=(SELECT MAX(version) FROM tabelle WHERE feld1="d1") AND feld1="d1"; Da bekommst du ja nur die höchste Version von d1. Für d2, d3 etc müsste jedesmal ne neue Abfrage geschrieben werden. Ich würde es so lösen: SELECT Feld1, MAX(Version) FROM tabelle GROUP BY(Feld1) Bearbeitet 12. November 2008 von Astra-Ben
0815FIA Geschrieben 12. November 2008 Geschrieben 12. November 2008 (bearbeitet) Ich würde es so lösen: SELECT Feld1, MAX(Version) FROM tabelle GROUP BY(Feld1) hast recht, weitaus sinniger bis auf das vielleicht feld2 selected werden sollte. Bearbeitet 12. November 2008 von 0815FIA
0815FIA Geschrieben 13. November 2008 Geschrieben 13. November 2008 so, ich hab mich gestern abend nochmal kurz mit diesem thema beschäftigt, und unsere beiden "Lösungen" waren leider schwachsinn. man braucht hier einen korrelierten subselect. die richtige lösung lautet: SELECT * FROM tabelle AS t1 WHERE version=(SELECT MAX(version) FROM tabelle AS t2 WHERE t1.feld1=t2.feld1);
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden