Seleccionar N Fila en Oracle
-
09-10-2019 - |
Pregunta
Supongamos que estamos teniendo los siguientes datos:
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
Quiero seleccionar Distinto Teclas ordenado por Valor DESC que se mostrará en una rejilla que soporta la paginación.
No sé cómo generar rango que los valores que aparecen en columna Rango deseado . De modo que pueda paginar correctamente sobre el conjunto de datos
Cuando traté de usar: DENSE_RANK () OVER (ORDER BY valor), el resultado fue
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
Cuando intento para seleccionar las dos primeras teclas “rango entre 1 y 2” que recibe de nuevo 3 llaves. Y esta ruinas del mecanismo de paginación necesario.
¿Alguna idea?
Gracias
Solución
Si desea que las claves y valores distintos, por qué no usar distinta?
select distinct
t.Key,
t.Value
from
YourTable t
order by
t.value
¿Le actualle necesita el rango?
Si lo hace, todavía podría
select distinct
t.Key,
t.Value,
dense_rank() over () order by (t.Value, t.Key) as Rank
from
YourTable t
order by
t.value
Este trabajo whould sin la distinta también.
Otros consejos
'Cuando intento para seleccionar los dos primeros llaves “rango entre 1 y 2” Recibo 3 teclas de vuelta. "
Esto se debe a que usted está pidiendo simplemente por valor, por lo que todas las claves con el mismo valor se les asigna el mismo valor. Así que hay que incluir la llave en la cláusula de pedidos. De esta manera:
DENSE_RANK() OVER (ORDER BY key ASC, value DESC)