Click here to Skip to main content
15,892,298 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi ..

I want to take take elements of sql rows from particular id and next from that point and want to skip previous records of that.

Please suggest .

What I have tried:

SQL
Declare @TopLocationCode NVARCHAR(15) ='Company'
Declare @LeastLoactionCode NVARCHAR(15) ='Area'
Declare @SearchLocationText NVARCHAR(100) = NULL
Declare @SearchLocationType INT = NULL
DECLARE @Rank INT

	SELECT	@Rank = Rank, 
			@SearchLocationType = CASE WHEN @SearchLocationType IS NULL THEN lt.LocationTypeID ELSE @SearchLocationType END
	FROM LocationType lt 
	WHERE LTRIM(RTRIM(lt.Code)) = LTRIM(RTRIM(@LeastLoactionCode));

       WITH HierarchyP
		   AS ( 
				SELECT l.LocationID,l.ParentLocationID
				FROM Location l
				INNER JOIN LocationType lt ON l.LocationTypeID = lt.LocationTypeID
				WHERE l.IsInActive = 0 AND LTRIM(RTRIM(lt.Code)) = LTRIM(RTRIM(@TopLocationCode))  

				UNION ALL

				SELECT l.LocationID, l.ParentLocationID
				FROM Location l
				INNER JOIN LocationType lt ON l.LocationTypeID = lt.LocationTypeID
				INNER JOIN HierarchyP ON				 
				l.ParentLocationID = HierarchyP.LocationID
				WHERE l.IsInActive = 0 AND Rank <= @Rank
		)

        SELECT DISTINCT
			l.LocationID,
			l.Code,
			l.Name,
			l.ParentLocationID ,
			lt.Code AS LocationTypeCode,
			lt.Rank  
		FROM 
		Location l INNER JOIN HierarchyP h ON l.LocationID = h.LocationID
		INNER JOIN LocationType lt ON lt.LocationTypeID = l.LocationTypeID
		WHERE ((ISNULL(@SearchLocationText,'') = '') 
		OR (l.LocationTypeID <> @SearchLocationType) 
		OR (l.LocationTypeID = @SearchLocationType AND l.Name LIKE '%' + @SearchLocationText + '%'))
Posted
Updated 25-Feb-16 1:27am
v2

Hi,

You can make a variable and store lastId of lastRow, then put a where condition on your query to get records after that Id

like:
@lastId=10;

select * from yourtable where yourTableId>@lastId


Ashish Nigam
 
Share this answer
 
Try with below options. Following query fetches 5 records from 6 to 10:

Option1: Use Row_Number
SQL
SELECT  *
FROM    (	  
		  SELECT DISTINCT ROW_NUMBER() OVER (ORDER BY LocationID) AS RowNum,			
			l.LocationID,
			l.Code,
			l.Name,
			l.ParentLocationID ,
			lt.Code AS LocationTypeCode,
			lt.Rank  
		FROM 
			Location l INNER JOIN HierarchyP h ON l.LocationID = h.LocationID
			INNER JOIN LocationType lt ON lt.LocationTypeID = l.LocationTypeID
			WHERE ((ISNULL(@SearchLocationText,'') = '') 
			OR (l.LocationTypeID <> @SearchLocationType) 
			OR (l.LocationTypeID = @SearchLocationType AND l.Name LIKE '%' + @SearchLocationText + '%'))			
        ) AS TempResult
WHERE   RowNum > 5
    AND RowNum <= 10
ORDER BY RowNum

Option2: Use Offset and Fetch
SQL
SELECT 		l.LocationID,
			l.Code,
			l.Name,
			l.ParentLocationID ,
			lt.Code AS LocationTypeCode,
			lt.Rank  
		FROM 
			Location l INNER JOIN HierarchyP h ON l.LocationID = h.LocationID
			INNER JOIN LocationType lt ON lt.LocationTypeID = l.LocationTypeID
			WHERE ((ISNULL(@SearchLocationText,'') = '') 
			OR (l.LocationTypeID <> @SearchLocationType) 
			OR (l.LocationTypeID = @SearchLocationType AND l.Name LIKE '%' + @SearchLocationText + '%'))
ORDER BY l.LocationID ASC
OFFSET 5 ROWS
FETCH NEXT 5 ROWS ONLY

Note: Offset-Fetch only works SQLSrever 2012 on wards.
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900