Как выбрать последние 5 строк в таблице без сортировки? - PullRequest
24 голосов
/ 22 ноября 2008

Я хочу выбрать последние 5 записей из таблицы в SQL Server без упорядочения таблицы в порядке возрастания или убывания.

Ответы [ 21 ]

2 голосов
/ 02 сентября 2013

Последние 5 строк извлекаются в MySQL


Этот запрос отлично работает

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

или

select sno from(select sno from recharge order by sno desc limit 5) as t where t.sno order by t.sno asc
2 голосов
/ 23 ноября 2008

Если вы знаете, сколько всего будет строк, вы можете использовать функцию ROW_NUMBER (). Вот пример из 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;
1 голос
/ 22 ноября 2008

Существует удобный трюк, который работает в некоторых базах данных для упорядочения в порядке базы данных,

SELECT * FROM TableName ЗАКАЗАТЬ по true

По-видимому, это может работать в сочетании с любыми другими предложениями, опубликованными здесь, чтобы оставить результаты в порядке «они вышли из базы данных», который в некоторых базах данных является порядком, в котором они были последний раз изменены. *

1 голос
/ 08 марта 2014

Я использую этот код:

select * from tweets where placeID = '$placeID' and id > (
    (select count(*) from tweets where placeID = '$placeID')-2)
1 голос
/ 28 декабря 2013

Когда количество строк в таблице меньше 5, ответы Мэтта Гамильтона и msuvajac неверны. Поскольку значение счетчика строк TOP N не может быть отрицательным.
Отличный пример можно найти Здесь .

1 голос
/ 22 ноября 2008

Вы можете извлечь их из памяти.
Итак, сначала вы получаете строки в DataSet, а затем получаете последние 5 из DataSet.

1 голос
/ 22 марта 2010
select * 
from table 
order by empno(primary key) desc 
fetch first 5 rows only
0 голосов
/ 19 октября 2015
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 голосов
/ 14 июня 2018

Спасибо @ Apps Tawale , основываясь на его ответе , вот немного другой (моей) версии,

Чтобы выбрать последние 5 записей без столбца идентификаторов,

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

Тем не менее, у него есть порядок по, но по RowNum:)

Примечание (1) : Приведенный выше запрос обратит порядок, который мы получаем при выполнении основного запроса select.

Таким образом, чтобы поддерживать порядок, мы можем слегка походить на:

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

Примечание (2): Без столбца идентификаторов запрос занимает немного времени в случае больших данных

0 голосов
/ 30 марта 2019

В SQL Server это кажется невозможным без использования порядка в запросе. Это то, что я использовал.

SELECT *
FROM
(
    SELECT TOP 5 *
    FROM [MyTable]
    ORDER BY Id DESC /*Primary Key*/
) AS T
ORDER BY T.Id ASC; /*Primary Key*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...