Oracle/PLSQL: recuperar N registros inferiores de la consulta

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

Oracle/PLSQL: recuperar N registros inferiores de la consulta

Pregunta: ¿Cómo puedo recuperar los últimos N registros de la consulta?

Por ejemplo, si quiero recuperar los últimos 3 registros de los resultados de la consulta. ¿Cómo puedo hacer esto?

Respuesta: para recuperar los últimos N registros de una consulta, puede usar la siguiente sintaxis:

SELECT *
FROM (your query ordered in reverse) alias_name
WHERE rownum <= Rows_to_return
ORDER BY rownum DESC;

Si desea recuperar el registro inferior de su consulta, debe ordenar de forma inversa los resultados en la sección “Ordenar inversamente su consulta” de la solución anterior.

Por ejemplo, si quisiera recuperar los últimos 3 registros de la tabla de proveedores, ordenados por nombre de proveedor en orden ascendente, ejecutaría la siguiente consulta:

SELECT *
FROM (select * from suppliers ORDER BY supplier_name DESC) suppliers2
WHERE rownum <= 3
ORDER BY rownum DESC;

Tenga en cuenta que aunque desea ordenar los últimos 3 registros en orden ascendente por nombre de proveedor, en esta solución en realidad está ordenando por nombre de proveedor en orden descendente.

Si quisiera recuperar los últimos 3 registros de la tabla de proveedores, ordenados por nombre de proveedor en orden descendente, ejecutaría la siguiente consulta:

SELECT *
FROM (select * from suppliers ORDER BY supplier_name) suppliers2
WHERE rownum <= 3
ORDER BY rownum DESC;

Si quisiera recuperar los últimos 5 registros de la tabla de proveedores, ordenados por ID de proveedor en orden ascendente, ejecutaría la siguiente consulta:

SELECT *
FROM (select * from suppliers ORDER BY supplier_id DESC) suppliers2
WHERE rownum <= 5
ORDER BY rownum DESC;

Si quisiera recuperar los últimos 5 registros de la tabla de proveedores, ordenados por ID de proveedor en orden descendente, ejecutaría la siguiente consulta:

SELECT *
FROM (select * from suppliers ORDER BY supplier_id) suppliers2
WHERE rownum <= 5
ORDER BY rownum DESC;