... where rownum = 1 order by trans_date desc
Isto seleciona um registro escolhido arbitrariamente (
where rownum = 1
) e então ordena este registro (order by trans_date desc
). Como mostrado por Ivan, você pode usar uma subconsulta onde você ordena os registros e, em seguida, mantém o primeiro registro com
where rownum = 1
na consulta externa. Isso, no entanto, é extremamente específico do Oracle e viola o padrão SQL onde um resultado de subconsulta é considerado não ordenado (ou seja, a cláusula order by pode ser ignorada pelo DBMS). Então é melhor ir com a solução padrão. A partir do Oracle 12c:
select *
from table_name
order by trans_date desc
fetch first 1 row only;
Em versões mais antigas:
select *
from
(
select t.*, row_number() over (order by trans_date desc) as rn
from table_name t
)
where rn = 1;