[SQL] Höchster Wert aus mehreren Werten auswählen und verknüpfen

schneckenschaef

Cadet 1st Year
Registriert
Jan. 2017
Beiträge
13
Liebes Forum

ich habe eine Tabelle, in der für Probanden mehrere Codes vergeben werden können. Jeder Eintrag bekommt eine neue ID via Auto-Increment. Somit habe ich die Spalten
ID|FK_PROBAND|CODE
1|44|1112011
2|44|1112012
3|45|1112021
...

Da für die Weiterverarbeitung nur der neueste Code relevant ist - also jeweils der mit der höheren ID - , möchte ich diesen für jeden FK_PROBAND auswählen. Mein Ansatz sieht so aus:

select
max(c.ID) as ID,
c.CODE as CODE
from probandencode c
group by c.FK_PROBAND

Die Ausgabe der höchsten ID funktioniert soweit aber dummerweise wird mir bei "CODE" trotzdem der Eintrag in der ersten Zeile ausgespuckt. Also konkret
ID|CODE
2|1112011
3|1112021

Die ID stimmt aber ich brauche den CODE, der zu eben dieser ID gehört. Sieht jemand meinen Fehler?
Vielen Dank schon mal
Viele Grüße
Martin
 
Zuletzt bearbeitet:
willst du jetzt alle drei haben oder nur zwei Einträge?

Wenn du drei willst, schaue auf deine Gruppierung.
Willst du nun
1|1112011
2|1112012
3|1112021

oder
2|1112012
3|1112021

Im zweiten Fall

select
max(c.ID) as ID,
max(c.CODE) as CODE
from probandencode c
group by c.FK_PROBAND

Achtung hierzu müssen die id und die codes sortiert sein. d.h. a.id < b.id => a.code < b.code.
 
Hi und danke für die schnelle Antwort. Ich will Fall zwei haben. Wenn ich allerdings max(c.CODE) verwende, dann wird ja der höchste Wert für den Code verwendet, nicht derjenige mit der höchsten ID. Da war mein Beispiel etwas doof gewählt. Die höhere Code-ID ist nicht zwangsweise an einen höheren Code gekoppelt. Es könnte auch sein, dass die ID "1" die 1112012 und die ID "2" die "1112011" hat. Insofern trifft die von dir genannte Bedingung leider nicht zu.
 
Zuletzt bearbeitet:
Funktioniert das?

select c.ID as ID,
c.CODE as CODE
from probandencode c
group by c.FK_PROBAND
having max(c.ID) = c.ID
 
Leider nein, jetzt werden jede Menge Fälle einfach gar nicht mehr angezeigt. Wenn ich das richtig sehe (sind einige tausend Leute), dann genau diejenigen, bei denen es mehrere Codes gibt.
 
select ID, CODE
from probandencode
where ID IN (select max(c.ID)
from probandencode c
group by c.FK_PROBAND)

bitte sehr ;)
 
Zurück
Oben