/* declare variables */
DECLARE @userID INT
DECLARE @maxCnt INT
DECLARE @tmpUser TABLE (tmpId INT IDENTITY(0,1), UserID INT)
/* quick way to limit to one user */
SET @userID = 223
/* populate the temp table */
INSERT INTO @tmpUser (UserId)
SELECT UserId FROM users
/* find max value for modulo math */
SELECT @maxCnt = COUNT(userid) FROM @tmpUser
--select * from @tmpUser
/* join against orginal data, using mod math and tmp table */
SELECT u.UserId, l.UserId, r.UserId
FROM users AS us
left join @tmpUser AS u ON u.userid = us.userid
left join @tmpUser AS l ON ((u.tmpId - 1 + @maxCnt) % @maxCnt) = l.tmpId
left join @tmpUser AS r ON ((u.tmpId + 1)% @maxCnt) = r.tmpId
WHERE us.userID = @UserID
Friday, March 30, 2007
Finding your left and right neighboring rows using a temp table
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment