Wählen Sie den zweitkleinsten Wert in Oracle

7

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.

    
ryebr3ad 18.11.2011, 19:35
quelle

3 Antworten

15

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.

    
Justin Cave 18.11.2011, 19:40
quelle
7
%Vor%

Vorteil: Sie können den dritten Wert genauso einfach erhalten, oder die unteren 10 Zeilen (Rang & lt; = 10).

Beachten Sie, dass die Leistung dieser Abfrage von einem geeigneten Index für 'Wert' profitiert.

    
GolezTrol 18.11.2011 19:37
quelle
5
%Vor%     
JNK 18.11.2011 19:36
quelle