答案 0 :(得分:8)
您可以使用LEAD()
函数,按特定顺序选择下一个值,如下所示:
注意 LEAD
仅被引入SQL-Server 2012 +。
SELECT s.id,s.name,s.number
FROM (
SELECT t.*
LEAD(t.id,1) OVER(ORDER BY t.Number DESC) as Next_val,
LEAD(t.id,1) OVER(ORDER BY t.Number) as Last_val
FROM YourTable t) s
WHERE 4 IN(s.id,next_Val,s.last_val)
您可以将4
替换为所需的ID
或参数。
编辑:一点点解释 - LEAD
功能提供了一种访问下一行的方法,无需使用SELF JOIN
或sub query
,按照您在OVER()
子句中提供的顺序对结果进行排序,并选择括号内的值 - LEAD(value)
,它们属于正在处理的当前记录上方的记录。因此,此查询选择每个ID
以及最近和最近属于最近值的ID
,然后检查其中一个是否是您想要的ID
。
答案 1 :(得分:0)
declare @id int = 4
select sn.*
from table sn
inner join
(
select top 2 sn_prev.*
from table sn_prev
where id <= @id
order by id desc
) sp on sp.id= sn.id
union
select sn.*
from table sn
inner join
(
select top 1 sn_prev.*
from table sn_prev
where id > @id
order by id
) sp on sp.id = sn.id
答案 2 :(得分:-1)
你可以在sql中使用MIN()和MAX()函数。