una seleccionar repitan repetir registros que para ocultar mostrar excluir excepto ejemplos duplicados datos consultas consulta columna campo sql-server tsql

sql-server - seleccionar - ocultar columna en consulta mysql



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

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


  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.


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


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


Cuando el número de filas en la tabla es inferior a 5, las respuestas de Matt Hamilton y msuvajac son incorrectas. Debido a que un valor de recuento de filas TOP N puede no ser negativo.
Un gran ejemplo se puede encontrar Here .


En SQL Server 2012 puedes 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;


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.


Gracias a @Apps Tawale , en base a su respuesta , aquí hay un poco de otra (mi) versión,

Para seleccionar los últimos 5 registros sin una columna de identidad,

select top 5 *, RowNum = row_number() OVER (ORDER BY (SELECT 0)) from [dbo].[ViewEmployeeMaster] ORDER BY RowNum desc

Sin embargo, tiene un orden por, pero en RowNum :)

Nota (1) : la consulta anterior invertirá el orden de lo que obtenemos cuando ejecutamos la consulta de selección principal.

Para mantener el orden, podemos decir algo así:

select *, RowNum2 = row_number() OVER (ORDER BY (SELECT 0)) from ( select top 5 *, RowNum = row_number() OVER (ORDER BY (SELECT 0)) from [dbo].[ViewEmployeeMaster] ORDER BY RowNum desc ) as t1 order by RowNum2 desc

Nota (2): sin una columna de identidad, la consulta toma un poco de tiempo en caso de datos de gran tamaño


Hay un truco útil que funciona en algunas bases de datos para ordenar en orden de bases de datos,

SELECT * FROM TableName ORDER BY true

Aparentemente, esto puede funcionar junto con cualquiera de las otras 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.


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


Las últimas 5 filas se recuperan en mysql

Esta consulta funciona perfectamente

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


Obtenga el conteo 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)


Pruebe esto, si no tiene una clave principal o una columna idéntica:

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


Puedes recuperarlos de la memoria.
Entonces, primero obtiene las filas en un DataSet y luego saca las últimas 5 del DataSet.


Si sabe cuántas filas habrá en total, puede usar la función ROW_NUMBER (). Aquí hay 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;


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]


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


estoy usando este código:

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


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


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


select * from table limit 5 offset (select count(*) from table) - 5;