CoreLean
CoreLean

Reputation: 2139

Skip first row in SQL Server 2005?

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?

Upvotes: 7

Views: 13157

Answers (4)

Mikael Eriksson
Mikael Eriksson

Reputation: 138960

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;

Upvotes: 2

Chris Diver
Chris Diver

Reputation: 19832

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.

Upvotes: 10

Sascha
Sascha

Reputation: 10347

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.

Upvotes: 5

LostInComputer
LostInComputer

Reputation: 15420

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

Upvotes: 2

Related Questions