一尘不染

使用MySQL查询选择最接近的数值

mysql

这可能比我做的要容易,但是基本上我需要做的是选择列中具有最接近数字的行作为指定值。例如:

数据库中指定列中的3行的值列表:10、15、16

如果我指定我想要最接近14的行,它将选择15的行。

另外,如果有2+行相同的距离,则随机选择其中之一。


阅读 876

收藏
2020-05-17

共1个答案

一尘不染

一种选择是遵循以下方式:

select   the_value,
         abs(the_value - 14) as distance_from_test
from     the_table
order by distance_from_test
limit 1

要选择随机记录,可以将其添加, rand()order by子句中。这种方法的缺点是您不能从索引中得到任何好处,因为您必须对派生值进行排序distance_from_test

如果您有索引the_value并且放宽了对平局时结果随机的要求,则可以执行一对有限范围查询,以选择紧接测试值上方的第一个值和紧接测试值下方的第一个值值并选择最接近测试值的值:

(
select   the_value
from     the_table
where    the_value >= 14
order by the_value asc
limit 1
)
union
(
select   the_value
from     the_table
where    the_value < 14
order by the_value desc
limit 1
)
order by abs(the_value - 14)
limit 1
2020-05-17