Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como selecionar o top 1 e ordenado por data no Oracle SQL?

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