以下是一些示例数字:
987
1001
1004
1009
1010
1016
1020
1050
Run Code Online (Sandbox Code Playgroud)
例如,我想选择最上面的4个数字是接近给定数1009(所以,其结果将是1001,1004,1010和1016),我应该怎么写SQL表达式?
通过减去和使用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)