Ich muss eine Abfrage schreiben, die einen minimalen Wert auswählt und es ist der zweitkleinste Wert aus einer Liste von ganzen Zahlen.
Das Ergreifen des kleinsten Wertes ist offensichtlich:
%Vor%Aber das zweitkleinste ist nicht so offensichtlich.
Für die Aufzeichnung ist diese Liste von Ganzzahlen nicht sequentiell - die Mindestanzahl kann 1000 und die zweitkleinste 10000 sein.
Verwenden Sie eine analytische Funktion
%Vor% Die Analysefunktionen RANK
, DENSE_RANK
und ROW_NUMBER
sind identisch, abgesehen davon, wie sie mit Bindungen umgehen. RANK
verwendet einen Sport-Stil-Prozess zum Brechen von Bindungen, wenn also zwei Reihen für einen Rang von 1 binden, hat die nächste Reihe den Rang 3. DENSE_RANK
gibt beiden Reihen, die für den ersten Platz gebunden sind, einen Rang von 1 und dann weist der nächsten Reihe einen Rang von 2 zu. ROW_NUMBER
bricht willkürlich die Krawatte und gibt einer der zwei Reihen mit dem niedrigsten Wert einen Rang von 1 und den anderen einen Rang von 2.
Tags und Links sql oracle oracle11g greatest-n-per-group