Vous pouvez aborder cela en utilisant 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;
Que vous considériez cela comme plus "élégant" est probablement une question de goût.
Je dois souligner que cela est subtilement différent de votre requête. Ceci est garanti pour retourner une ligne pour chaque key
; le vôtre pourrait renvoyer plusieurs lignes. Si vous voulez ce comportement, utilisez simplement rank()
ou dense_rank()
au lieu de row_number()
.