Oracle
 sql >> Database >  >> RDS >> Oracle

Ottieni il valore in base al massimo di una colonna diversa raggruppata per un'altra colonna

Puoi avvicinarti a questo usando 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;

Se lo consideri più "elegante" è probabilmente una questione di gusti.

Vorrei sottolineare che questo è leggermente diverso dalla tua domanda. Questo è garantito per restituire una riga per ogni key; il tuo potrebbe restituire più righe. Se vuoi quel comportamento, usa semplicemente rank() o dense_rank() invece di row_number() .