it-swarm.com.de

Wie mache ich die Top 1 in Oracle?

Wie mache ich das Folgende?

select top 1 Fname from MyTbl

In Oracle 11g ?

219
Gold

Wenn Sie nur eine erste ausgewählte Zeile wünschen, können Sie:

select fname from MyTbl where rownum = 1

Sie können auch Analysefunktionen verwenden, um das obere x zu bestellen und zu entnehmen:

select max(fname) over (rank() order by some_factor) from MyTbl
237
mcpeterson
SELECT *
  FROM (SELECT * FROM MyTbl ORDER BY Fname )
 WHERE ROWNUM = 1;

Mit Oracle 12c (Juni 2013) können Sie es wie folgt verwenden.

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

Sie können ROW_NUMBER() mit einer ORDER BY -Klausel in der Unterabfrage verwenden und diese Spalte anstelle von TOP N verwenden. Dies kann Schritt für Schritt erklärt werden.

Siehe die folgende Tabelle mit zwei Spalten NAME und DT_CREATED.

enter image description here

Wenn Sie unabhängig von NAME nur die ersten beiden Daten benötigen, können Sie die folgende Abfrage verwenden. Die Logik wurde in query geschrieben

-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
    -- Generates numbers in a column in sequence in the order of date
    SELECT ROW_NUMBER() OVER (ORDER BY DT_CREATED) AS RNO,
    NAME,DT_CREATED
    FROM DEMOTOP
)TAB
WHERE RNO<3;

ERGEBNIS

enter image description here

In einigen Situationen müssen wir TOP N Ergebnisse für jedes NAME auswählen. In diesem Fall können wir PARTITION BY mit einer ORDER BY -Klausel in der Unterabfrage verwenden. Wenden Sie sich an die folgende Abfrage.

-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
  --Generates numbers in a column in sequence in the order of date for each NAME
    SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY DT_CREATED) AS RNO,
    NAME,DT_CREATED
    FROM DEMOTOP
)TAB
WHERE RNO<3;

ERGEBNIS

enter image description here

9
Sarath Avanavu

Sie können so etwas tun

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

Sie können auch die Analysefunktionen RANK und/oder DENSE_RANK verwenden, aber ROWNUM ist wahrscheinlich die einfachste.

7
Suman
select * from (
    select FName from MyTbl
)
where rownum <= 1;
6
a'r

Verwenden:

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

Wenn Sie Oracle9i + verwenden, können Sie die Verwendung von Analysefunktionen wie ROW_NUMBER () untersuchen , diese funktionieren jedoch nicht so gut wie ROWNUM .

5
OMG Ponies

Das Auswählen der ersten Zeile aus einer Tabelle und das Auswählen einer Zeile aus einer Tabelle sind zwei verschiedene Aufgaben und erfordern eine andere Abfrage. Es gibt viele Möglichkeiten, dies zu tun. Vier von ihnen sind:

Zuerst

select  max(Fname) from MyTbl;

Zweite

select  min(Fname) from MyTbl;

Dritte

select  Fname from MyTbl  where rownum = 1;

Vierte

select  max(Fname) from MyTbl where rowid=(select  max(rowid) from MyTbl)
3
Vikas Hardia

Ich hatte das gleiche Problem, und ich kann dies mit dieser Lösung beheben:

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

Sie können Ihr Ergebnis vorbestellen, um den ersten Wert oben zu haben.

Viel Glück

2
user2607028