Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment sélectionner le top 1 et trier par date dans Oracle SQL ?

... where rownum = 1 order by trans_date desc

Ceci sélectionne un enregistrement choisi arbitrairement (where rownum = 1 ) puis trie cet enregistrement (order by trans_date desc ).

Comme l'a montré Ivan, vous pouvez utiliser une sous-requête dans laquelle vous ordonnez les enregistrements, puis conservez le premier enregistrement avec where rownum = 1 dans la requête externe. Ceci, cependant, est extrêmement spécifique à Oracle et viole la norme SQL où un résultat de sous-requête est considéré comme non ordonné (c'est-à-dire que la clause order by peut être ignorée par le SGBD).

Alors mieux vaut aller avec la solution standard. À partir d'Oracle 12c :

select * 
from table_name 
order by trans_date desc
fetch first 1 row only;

Dans les anciennes versions :

select *
from
(
  select t.*, row_number() over (order by trans_date desc) as rn
  from table_name t
)
where rn = 1;