Veröffentlicht 12. November 200816 j 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?
12. November 200816 j schau dir mal aggregatfunktionen an Bearbeitet 12. November 200816 j von 0815FIA
12. November 200816 j schau dir mal aggregatfunktionen an Ich hatte schon folgendes probiert was aber anscheinend nicht geht WHERE VERSION=MAX(VERSION)
12. November 200816 j 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 200816 j von 0815FIA
12. November 200816 j ups, glatt die softquotes vergessen -.-, sry SELECT feld2 FROM tabelle WHERE version=(SELECT MAX(version) FROM tabelle WHERE feld1="d1") AND feld1="d1";
12. November 200816 j 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 200816 j von Astra-Ben
12. November 200816 j 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 200816 j von 0815FIA
13. November 200816 j 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);
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.