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

时间:2016-08-10 06:37:36

标签: sql sql-server

我有这样的表:

enter image description here

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

enter image description here

请注意,我从两边选择了ID=4和两个最接近的值。

如何编写sql代码呢?

3 个答案:

答案 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 JOINsub 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()函数。