... 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;