Hoe doe ik Top 1 in Oracle?

Hoe doe ik het volgende?

select top 1 Fname from MyTbl

in Oracle 11g ?


1, Autoriteit 100%

Als u alleen een eerste geselecteerde rij wilt, kunt u:

select fname from MyTbl where rownum = 1

U kunt ook analytische functies gebruiken om de top x:

te bestellen en te nemen

select max(fname) over (rank() order by some_factor) from MyTbl

2, Autoriteit 64%

SELECT *
  FROM (SELECT * FROM MyTbl ORDER BY Fname )
 WHERE ROWNUM = 1;

3, Autoriteit 14%

Met Oracle 12c (juni 2013), kunt u het gebruiken zoals het volgende.

SELECT * FROM   MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL          
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY

Antwoord 4, autoriteit 4%

select * from (
    select FName from MyTbl
)
where rownum <= 1;

Antwoord 5, autoriteit 4%

Je kunt zoiets doen

   SELECT *
      FROM (SELECT Fname FROM MyTbl ORDER BY Fname )
 WHERE rownum = 1;

U kunt ook de analytische functies RANKen/of DENSE_RANKgebruiken, maar ROWNUMis waarschijnlijk het gemakkelijkst.


Antwoord 6, autoriteit 2%

Gebruik:

SELECT x.*
  FROM (SELECT fname 
          FROM MyTbl) x
 WHERE ROWNUM = 1

Als u Oracle9i+ gebruikt, kunt u kijken naar met analytische functies zoals ROW_NUMBER () maar ze zullen niet zo goed presteren als ROWNUM.


Antwoord 7

De eerste rij uit een tabel selecteren en één rij uit een tabel selecteren zijn twee verschillende taken en hebben een andere query nodig. Er zijn veel mogelijke manieren om dit te doen. Vier daarvan zijn:

Eerste

select  max(Fname) from MyTbl;

Tweede

select  min(Fname) from MyTbl;

Derde

select  Fname from MyTbl  where rownum = 1;

Vierde

select  max(Fname) from MyTbl where rowid=(select  max(rowid) from MyTbl)

Antwoord 8

Ik had hetzelfde probleem en ik kan dit oplossen met deze oplossing:

select a.*, rownum 
from (select Fname from MyTbl order by Fname DESC) a
where
rownum = 1

U kunt uw resultaat eerder bestellen om de eerste waarde bovenaan te krijgen.

Veel succes

Other episodes