2008-11-22 11 views

Respuesta

3

Sin 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]

+0

Derecha, también puede agregar un "pedido por colx desc" a la parte inferior 5, según los índices. es decir. los 5 primeros * SON * los de abajo 5 si invierte el orden. –

+0

Esto no es correcto. Esta consulta seleccionará 5 filas ** pero no (siempre) ** según cómo estén almacenadas en la base de datos.Si –

1

Puede recuperar de la memoria.
Primero, obtiene las filas en un DataSet y luego saca las últimas 5 del DataSet.

34

Esto es sólo acerca de la consulta más extraña que he escrito, pero estoy bastante seguro de que obtiene las filas "el pasado 5" de una mesa sin necesidad de ordenar:

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

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

+0

por último, que quiere decir en el orden de la clave agrupada, entonces estoy afarid que no funciona –

+0

He probado esto en una tabla que no tiene un índice agrupado, y volvió los últimos cinco filas que consigo al hacer un simple "seleccionar * de problemas". –

+0

Y acaba de probarlo en una tabla con una clave primaria "identity int", y funcionó allí también. Tengo las "últimas cinco" filas. –

2

Bueno, las "últimas cinco filas" son en realidad las últimas cinco filas, según 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 
1

Hay un truco muy útil que funciona en algunas bases de datos para pedir el fin de bases de datos,

SELECT * FROM TableName ORDER BY cierto

Al parecer, esto puede funcionar en conjunción con cualquiera de los otros sugerencias publicadas aquí para dejar los resultados en el orden "orden en que salieron de la base de datos", que en algunas bases de datos es el orden en el que se modificaron por última vez.

8

La forma en que se formula su pregunta lo hace parecer que usted piensa tener a phys resort recurrir a los datos en la tabla para recuperarlos 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.

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

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

Esto debe marcarse como la respuesta correcta (y la más compatible). – AshesToAshes

2

Si conoce el número de filas habrá en total puede usar la función ROW_NUMBER(). He aquí un examble de MSDN (http://msdn.microsoft.com/en-us/library/ms186734.aspx)

USE AdventureWorks; 
GO 
WITH OrderedOrders AS 
(
    SELECT SalesOrderID, OrderDate, 
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber' 
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60; 
27

Suponga que tiene un índice de identificación, esta será la velocidad del rayo:

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

Esto solo es seguro si no ha eliminado ningún registro. es decir. Si su identificación max = 100, pero se eliminan ficha 99, sólo se va a terminar con 4 registros, no – Amber

1
select * 
from table 
order by empno(primary key) desc 
fetch first 5 rows only 
+0

5. Como está escrito, selecciona todas las filas en orden, no sólo la primera 5. – JYelton

+0

@JYelton descendente - No se doesn' t. Solo es válido en SQL Server 2012 e ignora el requisito de "sin clasificación". –

10
  1. Necesitas contar el número de filas en el interior tabla (digamos que tenemos 12 filas)
  2. restar 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) 
    

    se les puede pedir ASC o DESC

    Pero cuando se utiliza este código

    select TOP 5 from users order by user_id DESC 
    

    no se ordenará fácilmente.

-1

obtener el recuento de esa mesa

select count(*) from TABLE 
select top count * from TABLE where 'primary key row' NOT IN (select top (count-5) 'primary key row' from TABLE) 
2
select * from table limit 5 offset (select count(*) from table) - 5; 
2

Últimos 5 filas recuperar en MySQL


Esta consulta funciona a la perfección

SELECT * FROM (SELECT * FROM recharge ORDER BY sno DESC LIMIT 5)sub ORDER BY sno ASC 

o

select sno from(select sno from recharge order by sno desc limit 5) as t where t.sno order by t.sno asc 
2

En SQL Server 2012 se puede hacer esto:

Declare @Count1 int ; 

Select @Count1 = Count(*) 
FROM [Log] AS L 

SELECT 
    * 
FROM [Log] AS L 
ORDER BY L.id 
OFFSET @Count - 5 ROWS 
FETCH NEXT 5 ROWS ONLY; 
1

Cuando el número de filas de la tabla es menor que 5 las respuestas de Matt Hamilton y msuvajac es incorrecta. Porque un valor de recuento de filas N TOP puede no ser negativo.
Un gran ejemplo se puede encontrar Here.

1

estoy utilizando este código:

select * from tweets where placeID = '$placeID' and id > (
    (select count(*) from tweets where placeID = '$placeID')-2) 
4

Buscar 5 registros de registros últimos se pueden utilizar esto,

SELECT * 
FROM Table Name 
WHERE ID <= IDENT_CURRENT('Table Name') 
AND ID >= IDENT_CURRENT('Table Name') - 5 
0
DECLARE @MYVAR NVARCHAR(100) 
DECLARE @step int 
SET @step = 0; 


DECLARE MYTESTCURSOR CURSOR 
DYNAMIC 
FOR 
SELECT col FROM [dbo].[table] 
OPEN MYTESTCURSOR 
FETCH LAST FROM MYTESTCURSOR INTO @MYVAR 
print @MYVAR; 


WHILE @step < 10 
BEGIN 
    FETCH PRIOR FROM MYTESTCURSOR INTO @MYVAR 
     print @MYVAR; 
     SET @step = @step + 1; 
END 
CLOSE MYTESTCURSOR 
DEALLOCATE MYTESTCURSOR 
0

Prueba de esto, si usted no tiene una clave primaria o columna idéntica:

select [Stu_Id],[Student_Name] ,[City] ,[Registered], 
     RowNum = row_number() OVER (ORDER BY (SELECT 0))  
from student 
ORDER BY RowNum desc 
Cuestiones relacionadas