Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie wählt man Top 1 aus und sortiert nach Datum in Oracle SQL?

... where rownum = 1 order by trans_date desc

Dies wählt einen willkürlich ausgewählten Datensatz aus (where rownum = 1 ) und sortiert dann diesen einen Datensatz (order by trans_date desc ).

Wie von Ivan gezeigt, können Sie eine Unterabfrage verwenden, in der Sie die Datensätze ordnen und dann den ersten Datensatz mit where rownum = 1 behalten in der äußeren Abfrage. Dies ist jedoch extrem Oracle-spezifisch und verstößt gegen den SQL-Standard, wo ein Unterabfrageergebnis als ungeordnet betrachtet wird (d. h. die order by-Klausel kann vom DBMS ignoriert werden).

Also lieber die Standardlösung nehmen. Ab Oracle 12c:

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

In älteren Versionen:

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