sql - 11g - select rownum oracle example
¿Cómo agregar compensación en una consulta "seleccionar" en Oracle 11g? (3)
Cómo agregar un desplazamiento en una consulta "seleccionar" en Oracle 11g. Solo sé cómo agregar el límite, por ejemplo, rownum <= 5
esta pregunta no es un duplicado, ya he comprobado las otras preguntas y no están relacionadas con las mías.
Entonces, ¿cómo agregar el desplazamiento en Oracle 11g?
Puede hacerlo fácilmente en 12c
especificando OFFSET
.
En 12c
,
SELECT val
FROM table
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;
Para hacer lo mismo en 11g
y anteriores, necesita usar ROWNUM
dos veces, inner query
y outer query
respectivamente.
La misma consulta en 11g
,
SELECT val
FROM (SELECT val, rownum AS rnum
FROM (SELECT val
FROM table
ORDER BY val)
WHERE rownum <= 8)
WHERE rnum > 4;
Aquí OFFSET
es 4.
Puede usar la función ROW_NUMBER para eso.
Quizás esto ayude:
SELECT *
FROM(SELECT t.*,
ROW_NUMBER() OVER (ORDER BY ...) rn -- whatever ordering you want
FROM your_table t
)
WHERE rn >= ... -- your offset
Espero que ayude
Usa la función LAG o LEAD en el oráculo
The LAG function is used to access data from a previous row
The LEAD function is used to return data from the next row
Uso:-
LAG (value_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause)
LEAD (value_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause)
Encuentre este enlace para ejemplos