Seleccione las últimas N filas de MySQL


121

Quiero seleccionar las últimas 50 filas de la base de datos MySQL dentro de la columna denominada id, que es la clave principal . El objetivo es que las filas se clasifiquen por id en el orden ASC , por eso esta consulta no funciona

SELECT 
    *
FROM
    `table`
ORDER BY id DESC
LIMIT 50;

También es notable que las filas puedan manipularse (eliminarse) y es por eso que la siguiente consulta tampoco funciona

SELECT 
    *
FROM
    `table`
WHERE
    id > ((SELECT 
            MAX(id)
        FROM
            chat) - 50)
ORDER BY id ASC;

Pregunta : ¿Cómo es posible recuperar las últimas N filas de la base de datos MySQL que se pueden manipular y estar en orden ASC?

Respuestas:


236

Puede hacerlo con una subconsulta:

SELECT * FROM (
    SELECT * FROM table ORDER BY id DESC LIMIT 50
) sub
ORDER BY id ASC

Esto seleccionará las últimas 50 filas tabley luego las ordenará en orden ascendente.


5
^ Para su información, sé que este artículo trata sobre MySQL, pero quería advertir que en respuesta al comentario de @ DiegoDD anterior, omitir la selección externa y el alias no parece funcionar en Postgres (9.3.5). Recibo un 'Error: no se permiten múltiples cláusulas ORDER BY'. Sin embargo, la respuesta aceptada funciona como se esperaba en Postgres
— allenwlee

¡Gracias por esto! Esta consulta me ayudó a solucionar mi problema. He estado buscando esto durante horas
— Arshad

1
¿Cómo puedo aplicar esta consulta con JOINS?
— GYaN

@GYaN agrega uniones en la subconsulta interna
— sheikh hamza

9
SELECT * FROM table ORDER BY id DESC,datechat desc LIMIT 50

Si tiene un campo de fecha que está almacenando la fecha (y la hora) en la que se envió el chat o cualquier campo que se rellene de forma incremental (orden por DESC) o desinscrementalmente (orden por ASC) de datos por fila, colóquelo como segunda columna en que los datos deben ser ordenados.

¡Eso es lo que funcionó para mí! espero que ayude !!!!


7
SELECT * FROM table ORDER BY id DESC LIMIT 50

guardar recursos hacer una consulta, no hay necesidad de hacer consultas anidadas


1
Su consulta devolverá los resultados a la inversa (ID descendente). La consulta de @ newfurniturey obtendrá las ÚLTIMAS filas insertadas ( LIMITen ID descendente), y el resultado final tendrá ID ascendentes.
— Robin Kanters

1
Su solución no obtendrá los resultados en el orden correcto, sino que los invertirá, por lo tanto, la necesidad de otro pedido para volver a colocarlos en el orden correcto
— Cobra47

1
Pero luego simplemente haz un php array_reverse () o lo que sea el equivalente en el lenguaje de programación que elijas. La base de datos no necesita hacer ese trabajo.
— Joe

6
@Joe No hay nada en la pregunta que indique que se está utilizando un lenguaje de secuencias de comandos, por lo que no es una suposición segura.
— Nick Coons

La respuesta esperada ya debería estar ordenada usando solo la consulta de la base de datos.
— d4ryl3

-2
select * from Table ORDER BY id LIMIT 30

Notas: * iddebe ser único. * Puede controlar el número de filas devueltas reemplazando el 30en la consulta


1
¿Podría explicar su solución? La explicación entre corchetes parece ser un código, coloque una oración completa arriba / abajo de su código. Gracias
— deHaar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.