Dies erreichen Sie mit row_number()
:
select key, val
from (select t.*, row_number() over (partition by key order by num desc) as seqnum
from table_name t
) t
where seqnum = 1;
Ob man das als "eleganter" empfindet, ist wohl Geschmackssache.
Ich sollte darauf hinweisen, dass sich dies geringfügig von Ihrer Anfrage unterscheidet. Dies gibt garantiert eine Zeile für jeden key
zurück; Ihre könnte mehrere Zeilen zurückgeben. Wenn Sie dieses Verhalten wünschen, verwenden Sie einfach rank()
oder dense_rank()
statt row_number()
.