zerberos Geschrieben 12. November 2008 Teilen 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 12. November 2008 Teilen Geschrieben 12. November 2008 (bearbeitet) schau dir mal aggregatfunktionen an Bearbeitet 12. November 2008 von 0815FIA Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
zerberos Geschrieben 12. November 2008 Autor Teilen Geschrieben 12. November 2008 schau dir mal aggregatfunktionen an Ich hatte schon folgendes probiert was aber anscheinend nicht geht WHERE VERSION=MAX(VERSION) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 12. November 2008 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 12. November 2008 Teilen 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"; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Astra-Ben Geschrieben 12. November 2008 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 12. November 2008 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 13. November 2008 Teilen 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); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.