Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von „ORDER BY' und „ROWNUM' effizient die oberste Zeile aus einer Oracle-Tabelle abrufen?

Wie kann ich mithilfe von „ORDER BY' und „ROWNUM' effizient die oberste Zeile aus einer Oracle-Tabelle abrufen?

Susan Sarandon
Susan SarandonOriginal
2025-01-07 07:35:41990Durchsuche

How to Efficiently Retrieve the Top Row from an Oracle Table Using `ORDER BY` and `ROWNUM`?

Oracle ORDER BY und ROWNUM effizient nutzen

In Oracle bietet die ROWNUM-Pseudospalte eine Möglichkeit, bestimmte Zeilen aus einer Ergebnismenge basierend auf abzurufen ihre Reihenfolge. Die Verwendung von ROWNUM mit ORDER BY kann jedoch zu unerwarteten Ergebnissen führen.

Um den neuesten Datensatz aus einer Tabelle abzurufen, wird in SQL Server häufig die folgende SQL-Abfrage verwendet:

SELECT TOP 1 *
FROM RACEWAY_INPUT_LABO
ORDER BY t_stamp DESC

Allerdings , in Oracle, wenn Sie diesen Ansatz mit ROWNUM wie in der folgenden Abfrage verwenden:

SELECT *
FROM raceway_input_labo 
WHERE  rownum <= 1
ORDER BY t_stamp DESC

ruft den ältesten Datensatz anstelle des neuesten ab. Dies liegt daran, dass ROWNUM in Oracle vor ORDER BY ausgewertet wird.

Um den neuesten Datensatz mithilfe von Oracles ROWNUM effektiv abzurufen, verwenden Sie Unterabfragen wie folgt:

SELECT * 
FROM 
    (SELECT *
     FROM raceway_input_labo 
     ORDER BY t_stamp DESC)
WHERE  rownum <= 1

Dieser Unterabfrageansatz stellt sicher, dass die ORDER BY wird zuerst angewendet, was zur gewünschten Ausgabe führt.

Alternativ kann eine vielseitigere Lösung, die sowohl in SQL Server als auch in Oracle funktioniert, mit implementiert werden die Funktion row_number():

select ril.*
from (select ril.*, row_number() over (order by t_stamp desc) as seqnum
      from raceway_input_labo ril
     ) ril
where seqnum = 1

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von „ORDER BY' und „ROWNUM' effizient die oberste Zeile aus einer Oracle-Tabelle abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn