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.