如何使用SQL选择相似的数字?

sil*_*ent 1 sql

以下是一些示例数字:

987
1001
1004
1009
1010
1016
1020
1050
Run Code Online (Sandbox Code Playgroud)

例如,我想选择最上面的4个数字是接近给定数1009(所以,其结果将是1001,1004,10101016),我应该怎么写SQL表达式?

Guf*_*ffa 7

通过减去和使用abs函数获取给定数字的距离:

select top 4 Number
from NumberTable
where number <> 1009
order by abs(Number - 1009)
Run Code Online (Sandbox Code Playgroud)

编辑:

正如您现在提到的那样,您有一个非常大的表,您需要一种方法来首先消除大部分结果.您可以在两个方向上选择最接近的四个,然后从中获取正确的:

select top 4 Number
from (
  select Number
  from (
    select top 4 Number
    from NumberTable
    where number < 1009
    order by number desc
  )
  union all
  select Number
  from (
    select top 4 Number
    from NumberTable
    where number > 1009
    order by number
  )
)
order by abs(Number - 1009)
Run Code Online (Sandbox Code Playgroud)

如果数字均匀分布,以便您确定可以在例如+ -100数字的范围内找到数字,则可以先获取该范围:

select top 4 Number
from (
  select Number
  from NumberTable
  where number between 1009-100 and 1009+100
)
where number <> 1009
order by abs(Number - 1009)
Run Code Online (Sandbox Code Playgroud)