Skip first row in SQL Server 2005?

时间秒杀一切 提交于 2019-12-19 06:16:28

问题


We can select Top 10 or Select Top 'N' row from SQL Server.

But is there any way to skip first row from the result of top??

I mean I get result from select top 5, then I skip the first row and get only next 4 rows?


回答1:


You can use OVER clause and a ranking function. You can't filter on this directly so you need to us a sub query or a common table expression, the example below uses the latter.

DECLARE @MyTable TABLE 
(
    ID INT,
    Name VARCHAR(15)
)
INSERT INTO @MyTable VALUES (1, 'Alice')
INSERT INTO @MyTable VALUES (2, 'Bob')
INSERT INTO @MyTable VALUES (3, 'Chris')
INSERT INTO @MyTable VALUES (4, 'David')
INSERT INTO @MyTable VALUES (5, 'Edgar')

;WITH people AS 
(
    SELECT ID, Name, ROW_NUMBER() OVER (ORDER BY ID) RN
    FROM @MyTable
)
SELECT ID, Name
FROM people 
WHERE RN > 1

There will be better support for pagination in the next version of SQL Server (codename Denali) with the OFFSET and FETCH keywords.




回答2:


You could do something like this:

SELECT
    *
FROM (
        SELECT      
            row_number() OVER (ORDER BY ID DESC) AS [rownum],
            *
        FROM
            tbl
) T
WHERE 
    rownum BETWEEN (2) AND (5)

Update:

Updated to have your values.

Update 2:

Corrected error with missing sub query. Thanks to Chris Diver pointing this out.




回答3:


What you are looking for is the term paging. Like this: http://www.15seconds.com/issue/070628.htm




回答4:


Something like this:

-- Test table
declare @T table(ID int)

-- Add test data
insert into @T 
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6

-- Query using row_number() over(...)
-- to get rows 2 - 5
select T.ID
from (
        select *,
               row_number() over(order by ID) as rn
        from @T       
     ) as T
where T.rn between 2 and 5


来源:https://stackoverflow.com/questions/7137889/skip-first-row-in-sql-server-2005

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!