Oracle Top 10-Datensatzauswahl mit Datumsausschluss
Dieser Artikel befasst sich mit der häufigen Herausforderung von Oracle-Datenbanken: dem Abrufen der Top-10-Datensätze, sortiert nach einer bestimmten Spalte, und gleichzeitig dem Ausschließen von Datensätzen, die bestimmten Kriterien entsprechen, aus einer anderen Tabelle. Ein einfaches SELECT DISTINCT
mit einer ORDER BY
- und ROWNUM
-Klausel reicht aufgrund des Zusammenspiels dieser Elemente nicht aus.
Die Lösung nutzt eine Unterabfrage, um das gewünschte Ergebnis zu erzielen:
<code class="language-sql">SELECT * FROM ( SELECT DISTINCT APP_ID, NAME, STORAGE_GB, HISTORY_CREATED, TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE FROM HISTORY WHERE STORAGE_GB IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM HISTORY h2 WHERE h2.APP_ID = HISTORY.APP_ID AND TO_CHAR(h2.HISTORY_DATE, 'DD.MM.YYYY') ='06.02.2009' ) ORDER BY STORAGE_GB DESC ) WHERE ROWNUM <= 10;</code>
Dieser Ansatz filtert zunächst die Tabelle HISTORY
innerhalb der inneren Abfrage. Die NOT EXISTS
-Klausel schließt effizient Datensätze aus, bei denen APP_ID
Datensätze mit HISTORY_DATE
gleich „06.02.2009“ übereinstimmt. Die Ergebnisse werden dann nach STORAGE_GB
(absteigend) sortiert. Die äußere Abfrage wendet die Einschränkung ROWNUM <= 10
an und stellt sicher, dass nur die obersten 10 Datensätze zurückgegeben werden. Diese Methode wendet das Zeilenlimit nach der Filterung und Sortierung korrekt an und garantiert so genaue Ergebnisse.
Hinweis: NOT EXISTS
bietet im Allgemeinen eine bessere Leistung als NOT IN
für diese Art von Ausschluss, insbesondere bei großen Datensätzen. Weitere Strategien zur Leistungsoptimierung finden Sie in der Oracle-Dokumentation.
Das obige ist der detaillierte Inhalt vonWie wähle ich die Top 10 Oracle-Datensätze aus und schließe dabei bestimmte Daten aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!