Saltar al contenido

¿Cómo seleccionar la fila n en una tabla de base de datos SQL?

Después de investigar con expertos en este tema, programadores de varias áreas y profesores dimos con la respuesta al dilema y la plasmamos en este post.

Solución:

Hay formas de hacer esto en partes opcionales del estándar, pero muchas bases de datos admiten su propia forma de hacerlo.

Un sitio realmente bueno que habla de esto y otras cosas es http://troels.arvin.dk/db/rdbms/#select-limit.

Básicamente, PostgreSQL y MySQL admiten lo no estándar:

SELECT...
LIMIT y OFFSET x 

Oracle, DB2 y MSSQL admiten las funciones de ventanas estándar:

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
    columns
  FROM tablename
) AS foo
WHERE rownumber <= n

(que acabo de copiar del sitio vinculado anteriormente ya que nunca uso esos DB)

Actualizar: A partir de PostgreSQL 8.4, las funciones de ventana estándar son compatibles, así que espere que el segundo ejemplo también funcione para PostgreSQL.

Actualizar: SQLite agregó compatibilidad con funciones de ventana en la versión 3.25.0 el 2018-09-15, por lo que ambas formas también funcionan en SQLite.

PostgreSQL admite las funciones de ventanas definidas por el estándar SQL, pero son incómodas, por lo que la mayoría de las personas usan (las no estándar) LIMIT / OFFSET:

SELECT
    *
FROM
    mytable
ORDER BY
    somefield
LIMIT 1 OFFSET 20;

Este ejemplo selecciona la fila 21. OFFSET 20 le está diciendo a Postgres que se salte los primeros 20 registros. Si no especifica un ORDER BY cláusula, no hay garantía de qué registro obtendrá, lo que rara vez es útil.

No estoy seguro del resto, pero sé que SQLite y MySQL no tienen ningún orden de fila "predeterminado". En esos dos dialectos, al menos, el siguiente fragmento toma la entrada número 15 de the_table, ordenando por la fecha/hora en que se agregó:

SELECT * FROM the_table ORDER BY added DESC LIMIT 1,15

(por supuesto, necesitaría tener un campo DATETIME agregado y establecerlo en la fecha/hora en que se agregó la entrada...)

Te mostramos las comentarios y valoraciones de los lectores

Si te animas, tienes la habilidad dejar una noticia acerca de qué te ha gustado de esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *