如何在SQL中上下找到第一个最接近的值?

sha*_*roz 7 sql sql-server

我有这样的表:

在此输入图像描述

当我设置id = 4时,我需要的结果是:

在此输入图像描述

请注意,我ID=4从两侧选择了两个最接近的值.

如何编写sql代码呢?

sag*_*agi 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)
Run Code Online (Sandbox Code Playgroud)

您可以4使用所需ID或参数替换.

编辑:一个小解释 - LEAD函数提供了一种访问下一行的方法,不使用a SELF JOIN或a sub query,它按照你在OVER()子句中提供的顺序对结果进行排序,并选择括号内的值 - LEAD(value)属于记录在当前正在处理的记录之上.因此,此查询选择每个ID,并且ID上下都属于最近的值,然后检查其中一个是否是您想要的ID.