Select Distinct mit mehr als den Distinct Spalten

BruderOli

Grünschnabel
Hallo zusammen,

nachdem ich das Internet durchforstet habe, und zur keinen Lösung gekommen bin, hier also meine Anfrage:

Ich habe eine Tabelle mit 5 Spalten
Spalte1, Spalte2, Spalte3, Spalte4, Spalte5

Was ich jetzt möchte ist:
Select distinct Spalte1, Spalte2, Spalte3
und von diesem Ergebnis will ich die ERSTE Information von Spalte 4 und 5 haben.

Zur Veranschaulichung hier ein Beispiel:

Die Tabelle:
Spalte1 Spalte2 Spalte3 Spalte4 Spalte5
123456789 25.05.2005 1 88 2135
123456789 25.05.2005 1 85 7757
123456789 26.05.2005 1 87 7342
123456789 26.05.2005 1 75 7342
987654321 27.05.2005 2 73 4342
987654321 27.05.2005 2 44 4542
987654321 27.05.2005 3 74 4662

Das Ergebnis:
Spalte1 Spalte2 Spalte3 Spalte4 Spalte5
123456789 25.05.2005 1 88 2135
123456789 26.05.2005 1 87 7342
987654321 27.05.2005 2 73 4342
987654321 27.05.2005 3 74 4662

Sprich: Ein distinct auf den ersten 3 Spalten, wobei die Erste Information von Spalte 4 und 5 mitgenommen wird.

Umgangssprachlich (natürlich kein reales Beispiel, nur zum Verständnis) würd ich den SQL so aufbauen:
Select
distinct(Spalte1, Spalte2, Spalte3),
FIRST(Spalte4 vom distinct),
FIRST(Spalte5 vom distinct)

Ich hoffe ich hab es gut genug erklärt. Ich hoffe ihr könnt mir helfen.
Vielen Dank schonmal
 
Du musst Group By für die ersten 3 Spalten verwenden und für die anderen kannst du Min() verwenden.
 
Die Idee hatte ich auch schon, aber Min gibt mir dann ja den Minimalwert zurück. Ich will aber nicht den Minimalwert, sondern den ersten Wert.

Wenn du das dann mal eingeben würdest bei dir als SQL würde auch nicht das Ergebnis rauskommen, dass ich beschrieben habe.

Ich würde dann ja folgendes Ergebnis bekommen:
Spalte1 Spalte2 Spalte3 Spalte4 Spalte5
123456789 25.05.2005 1 85 2135
123456789 26.05.2005 1 75 7342
987654321 27.05.2005 2 44 4342
987654321 27.05.2005 3 74 4662

Aber das Ergebnis will ich ja nicht
 
Zuletzt bearbeitet:
Naja Limit 1 klingt toll ... wie wäre das denn dann umzusetzen?

Bitte mal als SQL kurz schreiben mit den 5 Spalten, weil genau das ist ja mein Problem. Ich bekomme die richtige Syntax einfach net hin, sodass sie funktioniert.
 
Zuletzt bearbeitet:
Hallo BruderOli,

LIMIT 1 bringt dir nur etwas, wenn du nur eine Ergebniszeile haben möchtest.
Aber das willst du ja nicht, denn du möchtest ja zu jeden gruppierten Wert (aus Spalte 1 bis 3) eine Zeile.

Also ist der Ansatz von zeja
Du musst Group By für die ersten 3 Spalten verwenden und für die anderen kannst du Min() verwenden.
der richtige Ansatz.

Das was dir hier fehlt ist die richtige Funktion für die Spalten 4 und 5.
Denn du möchtest wohl nicht den kleinsten Wert (Min()). Aber ein Kriterium für den jeweils zuletzt eingegebenen Datensatz gibt es nicht.
Zu lösen wäre dies Problem mit einem Feld (autoindex) in deiner Tabelle. Damit kannst du dann die Reihenfolge ermitteln.
 
Hab verstanden was du meinst. Allerdings ist es mir nicht möglich eine zusätzliche Spalte anzufertigen um dort den Autoindex einzutragen, ansonsten wäre das eine richtige Lösung.
 
Hi,

ich fürchte, dann wirst Du Dein Vorhaben mit einem SQL-Statement nicht zuverlässig umsetzen können. Du brauchst ein Kriterium. Wie sonst wolltest Du z.B. den neuesten Datensatz ansich, ohne den ganzen Gruppierungskram auslesen?

LG
 
Zurück