2013-10-12 55 views
1

我需要从表中选择最后5行,但MS SQL Server中的最后一条记录除外。从表中选择除最后一行以外的前5行

换句话说:

SELECT TOP 5 * 
FROM table 
ORDER BY column DESC 

,但不考虑这个选择表中最后一个记录。

我该怎么做?

+0

可能的[SQL Server的LIMIT和OFFSET的等价物]的副本(http://stackoverflow.com/questions/2135418/equivalent-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 
相关问题