帮我处理我的选择查询

khe*_*eya 1 sql sql-server-2005

我在sql server 2005中有这个表:

id   student active
1   Bob     1
3   Rob     0
5   Steve   1
7   John    1
8   Mark    0
10   Dave    0
16   Nick    1
Run Code Online (Sandbox Code Playgroud)

我的选择查询按给定的ID返回活动学生.但我也希望返回上一个和下一个活跃的学生的ID.如果没有prev,则为0或null.下一个相同.

示例:对于id = 5,我的选择将返回

id    student    prev_id    next_id
5     steve       1          7
Run Code Online (Sandbox Code Playgroud)

示例:对于id = 7,我的选择将返回

id    student    prev_id    next_id
7     John       5          16
Run Code Online (Sandbox Code Playgroud)

示例:对于id = 16,我的选择将返回

id    student    prev_id    next_id
16    Nick       7          0
Run Code Online (Sandbox Code Playgroud)

如何编写此选择查询?

我有查询,但我无法正确获得prev id.它始终返回第一个活动ID.

谢谢

编辑:这是我现在的查询.

select id, student, 
(select top 1 id from test where id<7 and active=1) as prev,
(select top 1 id from test where id>7 and active=1) as next 
from test where id=7--I used 7 just as an example. it will be a parameter
Run Code Online (Sandbox Code Playgroud)

小智 5

尝试这样的事情

SELECT  ID,
        Student,
        ( SELECT TOP 1
                    ID
          FROM      dbo.table AS pT
          WHERE     pT.ID < T.ID And Active = 1
          ORDER BY  ID DESC
        ) AS PrevID,
        ( SELECT TOP 1
                    ID
          FROM      dbo.table AS pT
          WHERE     pT.ID > T.ID And Active = 1
          ORDER BY  ID
        ) AS NextID
FROM    dbo.table AS T
Run Code Online (Sandbox Code Playgroud)