2013-10-12 5 views
1

Мне нужно выбрать последние 5 строк из таблицы, кроме последней записи в MS SQL Server.Выберите верхние 5 строк из таблицы, кроме последней строки

Другими словами:

SELECT TOP 5 * 
FROM table 
ORDER BY column DESC 

, но не принимая во внимание таблицу последняя запись в этом выбрать.

Как я могу это сделать?

+0

возможный дубликат [Эквивалент LIMIT и OFFSET для SQL Server?] (http://stackoverflow.com/questions/2135418/equal-of-limit-and-offset-for-sql-server) Также как и принятый ответ, см. также ответ Somnath Muluk, если вы используете SQLServer 2012. –

+0

Я разместил предложение @Mark как ответ, так как это будет ясно для будущих читателей. – Zanon

ответ

0

SQL Fiddle Example

Это может быть легко достигнуто в MS SQL Server 2012, используя следующий код:

BEGIN 

    DECLARE 
    @OFFSET int = 1, 
    @LIMIT int = 5 

    -- SQL Server 2012+ 
    SELECT id, name 
    FROM t 
    ORDER BY name DESC -- DESC because you want the list upside down 
    OFFSET @OFFSET ROWS -- skipped rows 
    FETCH NEXT @LIMIT ROWS ONLY -- number of rows 

END; 


Для более старой версии SQL Server, используйте:

BEGIN 

    DECLARE 
    @OFFSET int = 1, 
    @LIMIT int = 5 

    -- SQL Server 2008 
    ;WITH cte AS 
    (
    SELECT 
     id, 
     name, 
     ROW_NUMBER() OVER (ORDER BY name DESC) AS RowNum -- DESC because you want the list upside down 
    FROM t 
) 
    SELECT id, name 
    FROM cte 
    WHERE RowNum > @OFFSET 
    AND RowNum <= @OFFSET + @Limit 

END 
Смежные вопросы