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
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
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
.
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
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
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.
select * from (
select FName from MyTbl
)
where rownum <= 1;
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 .
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)
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