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

Come selezionare i primi 1 e ordinati per data in Oracle SQL?

... where rownum = 1 order by trans_date desc

Questo seleziona un record scelto arbitrariamente (where rownum = 1 ) e quindi ordina questo record (order by trans_date desc ).

Come mostrato da Ivan puoi usare una sottoquery in cui ordini i record e poi mantieni il primo record con where rownum = 1 nella query esterna. Questo, tuttavia, è estremamente specifico di Oracle e viola lo standard SQL in cui un risultato di sottoquery è considerato non ordinato (cioè la clausola order by può essere ignorata dal DBMS).

Quindi meglio andare con la soluzione standard. A partire da Oracle 12c:

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

Nelle versioni precedenti:

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