这可能比我做的要容易,但是基本上我需要做的是选择列中具有最接近数字的行作为指定值。例如:
数据库中指定列中的3行的值列表:10、15、16
如果我指定我想要最接近14的行,它将选择15的行。
另外,如果有2+行相同的距离,则随机选择其中之一。
一种选择是遵循以下方式:
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。
, rand()
order by
distance_from_test
如果您有索引the_value并且放宽了对平局时结果随机的要求,则可以执行一对有限范围查询,以选择紧接测试值上方的第一个值和紧接测试值下方的第一个值值并选择最接近测试值的值:
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