Oracle Database
Limitar las filas devueltas por una consulta (Paginación)
Buscar..
Obtener las primeras N filas con la cláusula de limitación de fila
La cláusula FETCH
se introdujo en Oracle 12c R1:
SELECT val
FROM mytable
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;
Un ejemplo sin FETCH que funciona también en versiones anteriores:
SELECT * FROM (
SELECT val
FROM mytable
ORDER BY val DESC
) WHERE ROWNUM <= 5;
Paginación en SQL
SELECT val
FROM (SELECT val, rownum AS rnum
FROM (SELECT val
FROM rownum_order_test
ORDER BY val)
WHERE rownum <= :upper_limit)
WHERE rnum >= :lower_limit ;
De esta manera podemos paginar los datos de la tabla, al igual que la página de servicio web
Obtener N números de registros de la tabla
Podemos limitar el número de filas del resultado utilizando la cláusula rownum
select * from
(
select val from mytable
) where rownum<=5
Si queremos el primer o último registro, queremos una cláusula orden por en la consulta interna que dará un resultado basado en el pedido.
Los últimos cinco discos:
select * from
(
select val from mytable order by val desc
) where rownum<=5
Primeros cinco discos
select * from
(
select val from mytable order by val
) where rownum<=5
Obtenga las filas N a M de muchas filas (antes de Oracle 12c)
Utilice la función analítica row_number ():
with t as (
select col1
, col2
, row_number() over (order by col1, col2) rn
from table
)
select col1
, col2
from t
where rn between N and M; -- N and M are both inclusive
Oracle 12c maneja esto más fácilmente con OFFSET
y FETCH
.
Saltando algunas filas y luego tomando algunas
En Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;
En versiones anteriores
SELECT Id,
Col1
FROM (SELECT Id,
Col1,
row_number() over (order by Id) RowNumber
FROM TableName)
WHERE RowNumber BETWEEN 21 AND 40
Saltando algunas filas del resultado
En Oracle 12g +
SELECT Id, Col1
FROM TableName
ORDER BY Id
OFFSET 5 ROWS;
En versiones anteriores
SELECT Id,
Col1
FROM (SELECT Id,
Col1,
row_number() over (order by Id) RowNumber
FROM TableName)
WHERE RowNumber > 20
Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow