Sélectionnez N Row dans Oracle
-
09-10-2019 - |
Question
Supposons que nous ayons les données suivantes:
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
Je veux sélectionner Distinct Touches ordonnée par Valeur DESC pour afficher dans une grille de pagination des supports.
Je ne sais pas comment générer rang que les valeurs affichées dans souhaité colonne Rang . Alors que je peux paginer correctement sur l'ensemble de données
Quand j'ai essayé d'utiliser: DENSE_RANK () OVER (ORDER BY valeur), le résultat a été
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
Lorsque je tente de sélectionner les deux premières touches « rang entre 1 et 2 » Je reçois dos 3 clés. Et ce ruines du mécanisme de pagination nécessaire.
Toutes les idées?
Merci
La solution
Si vous voulez que les clés et les valeurs distinctes, pourquoi ne pas utiliser distinctes?
select distinct
t.Key,
t.Value
from
YourTable t
order by
t.value
Avez-vous besoin actualle rang?
Si vous le faites, vous pouvez toujours
select distinct
t.Key,
t.Value,
dense_rank() over () order by (t.Value, t.Key) as Rank
from
YourTable t
order by
t.value
Ce travail whould sans distinct ainsi.
Autres conseils
'Lorsque je tente de sélectionner les deux premiers clés « rang entre 1 et 2 » Je reçois retour 3 clés.
C'est parce que vous commandez juste en valeur, de sorte que toutes les touches avec la même valeur se voient attribuer le même rang. Donc, vous devez inclure la clé dans la clause de commande. Comme ceci:
DENSE_RANK() OVER (ORDER BY key ASC, value DESC)