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

Få værdi baseret på maks. af en anden kolonne grupperet efter en anden kolonne

Du kan nærme dig dette ved at bruge 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;

Om du betragter dette som mere "elegant" er nok en smagssag.

Jeg skal påpege, at dette er subtilt anderledes end din forespørgsel. Dette returnerer garanteret én række for hver key; din kunne returnere flere rækker. Hvis du ønsker den adfærd, skal du blot bruge rank() eller dense_rank() i stedet for row_number() .




  1. Fejlfinding AlwaysOn – Nogle gange kræver det mange sæt øjne

  2. SQL Server Passthrough-forespørgsel som grundlag for et DAO-postsæt i Access

  3. Opdater en kolonne i en tabel med en kolonne i en anden tabel i PostgreSQL

  4. Lokal midlertidig tabel i Oracle 10 (for omfanget af Stored Procedure)