Wählen Sie N Row in Oracle
-
09-10-2019 - |
Frage
Angenommen, wir die folgenden Daten haben:
Key Value Desired Rank
--- ----- ------------
P1 0.6 2
P1 0.6 2
P1 0.6 2
P2 0.8 1
P2 0.8 1
P3 0.6 3
P3 0.6 3
Ich möchte Distinct wählen Tasten bestellt von Wert DESC in einem Raster angezeigt werden, dass Träger Paginierung.
Ich weiß nicht, wie Rang zu erzeugen, wie die Werte angezeigt in Gewünschter Rang Spalte . Damit ich richtig über den Datensatz Paginieren kann
Als ich zu verwenden versucht: DENSE_RANK () OVER (ORDER BY-Wert), das Ergebnis war
Key Value DENSE_RANK() OVER(ORDER BY value)
--- ----- ------------
P1 0.6 2
P1 0.6 2
P1 0.6 2
P2 0.8 1
P2 0.8 1
P3 0.6 2
P3 0.6 2
Wenn ich versuche, die ersten beiden Tasten „Rang zwischen 1 und 2“ zu wählen, erhalten I 3 Schlüssel zurück. Und diese Ruinen der erforderliche Paginierung Mechanismus.
Irgendwelche Ideen?
Danke
Lösung
Wenn Sie die eindeutigen Schlüssel und Werte möchten, verwenden warum nicht unterscheidbar?
select distinct
t.Key,
t.Value
from
YourTable t
order by
t.value
Haben Sie den Rang benötigen actualle?
Wenn Sie das tun, könnten Sie immer noch
select distinct
t.Key,
t.Value,
dense_rank() over () order by (t.Value, t.Key) as Rank
from
YourTable t
order by
t.value
Diese whould Arbeit ohne die deutlichen als auch.
Andere Tipps
"Wenn ich versuche, die ersten beiden zu wählen Tasten „Rang zwischen 1 und 2“ I erhalten zurück 3 Schlüssel. "
Das ist, weil Sie gerade durch VALUE Bestellung, so dass alle Tasten mit dem gleichen Wert den gleichen Rang zugeordnet sind. So müssen Sie den Schlüssel in der Reihenfolge Klausel aufzunehmen. Wie folgt aus:
DENSE_RANK() OVER (ORDER BY key ASC, value DESC)