... where rownum = 1 order by trans_date desc
Dit selecteert een willekeurig gekozen record (where rownum = 1
) en sorteert dan dit ene record (order by trans_date desc
).
Zoals Ivan laat zien, kun je een subquery gebruiken waarin je de records bestelt en vervolgens de eerste record behouden met where rownum = 1
in de buitenste vraag. Dit is echter extreem Oracle-specifiek en schendt de SQL-standaard waarbij een subqueryresultaat als ongeordend wordt beschouwd (d.w.z. de clausule op volgorde kan worden genegeerd door het DBMS).
Ga dus liever voor de standaardoplossing. Vanaf Oracle 12c:
select *
from table_name
order by trans_date desc
fetch first 1 row only;
In oudere versies:
select *
from
(
select t.*, row_number() over (order by trans_date desc) as rn
from table_name t
)
where rn = 1;