1
我需要从表中选择最后5行,但MS SQL Server中的最后一条记录除外。从表中选择除最后一行以外的前5行
换句话说:
SELECT TOP 5 *
FROM table
ORDER BY column DESC
,但不考虑这个选择表中最后一个记录。
我该怎么做?
我需要从表中选择最后5行,但MS SQL Server中的最后一条记录除外。从表中选择除最后一行以外的前5行
换句话说:
SELECT TOP 5 *
FROM table
ORDER BY column DESC
,但不考虑这个选择表中最后一个记录。
我该怎么做?
它可以很容易地在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
可能的[SQL Server的LIMIT和OFFSET的等价物]的副本(http://stackoverflow.com/questions/2135418/equivalent-of-limit-and-offset-for-sql-server)以及接受的答案,另请参阅Somnath Muluk的答案,如果使用SQLServer 2012. –
我已发布@Mark建议作为答案未来的读者将会清楚。 – Zanon