Pregunta ¿Cómo selecciono las últimas 5 filas en una tabla sin ordenar?


Quiero seleccionar los últimos 5 registros de una tabla en SQL Server sin organizar la tabla en orden ascendente o descendente.


22
2017-11-22 08:00


origen


Respuestas:


Esta es casi la pregunta más extraña que he escrito, pero estoy bastante seguro de que obtiene las "últimas 5" filas de una tabla sin ordenar:

select * 
from issues
where issueid not in (
    select top (
        (select count(*) from issues) - 5
    ) issueid
    from issues
)

Tenga en cuenta que esto hace uso de la capacidad de SQL Server 2005 para pasar un valor a la cláusula "superior", no funciona en SQL Server 2000.


34
2017-11-22 08:09



Supongamos que tiene un índice en la identificación, esto será muy rápido:

SELECT * FROM [MyTable] WHERE [id] > (SELECT MAX([id]) - 5 FROM [MyTable])

27
2018-03-19 08:27



  1. Necesita contar el número de filas dentro de la tabla (digamos que tenemos 12 filas)
  2. luego resta 5 filas de ellos (ahora estamos en 7)
  3. seleccione * donde index_column> 7

    select * from users
    where user_id > 
    ( (select COUNT(*) from users) - 5)
    

    puedes ordenarlos ASC o DESC

    Pero al usar este código

    select TOP 5 from users order by user_id DESC
    

    no se ordenará fácilmente.


10
2017-10-14 15:20



La forma en que se formula su pregunta hace que suene como si pensara que tiene que recurrir físicamente a los datos de la tabla para volver a ponerlos en el orden que desee. Si es así, este no es el caso, la cláusula ORDER BY existe para este propósito. El orden físico en el que se almacenan los registros permanece sin cambios cuando se usa ORDER BY. Los registros se ordenan en la memoria (o en el espacio temporal en disco) antes de que se devuelvan.

Tenga en cuenta que el orden en que se devuelven los registros no está garantizado sin utilizar una cláusula ORDER BY. Entonces, si bien algunas de las sugerencias aquí pueden funcionar, no hay ninguna razón para pensar que continuarán funcionando, ni puede probar que funcionan en todos los casos con su base de datos actual. Esto es por diseño, supongo que es para dar libertad al motor de la base de datos con los registros para obtener el mejor rendimiento en el caso de que no se especifique una orden explícita.

Suponiendo que quiere los últimos 5 registros ordenados por el campo Nombre en orden ascendente, podría hacer algo como esto, que debería funcionar en SQL 2000 o 2005:

select Name 
from (
    select top 5 Name 
    from MyTable 
    order by Name desc
) a 
order by Name asc

9
2017-11-23 05:54



Busca 5 registros de los últimos registros que puedas usar,

SELECT *
FROM   Table Name
WHERE  ID <= IDENT_CURRENT('Table Name')
AND ID >= IDENT_CURRENT('Table Name') - 5

4
2018-02-27 01:23



Sin una orden, esto es imposible. ¿Qué define el "fondo"? Lo siguiente seleccionará 5 filas de acuerdo a cómo se almacenan en la base de datos.

SELECT TOP 5 * FROM [TableName]


3
2017-11-22 08:02



Bueno, las "últimas cinco filas" son en realidad las últimas cinco filas dependiendo de su índice agrupado. Su índice agrupado, por definición, es la forma en que las filas están ordenadas. Entonces realmente no puedes obtener las "últimas cinco filas" sin algún orden. Sin embargo, puede obtener las últimas cinco filas en lo que respecta al índice agrupado.

SELECT TOP 5 * FROM MyTable
ORDER BY MyCLusteredIndexColumn1, MyCLusteredIndexColumnq, ..., MyCLusteredIndexColumnN DESC

2
2017-11-22 08:16