一种选择是遵循以下方式:
select the_value, abs(the_value - 14) as distance_from_testfrom the_tableorder by distance_from_testlimit 1
要选择随机记录,可以将其添加
, rand()到
orderby子句中。这种方法的缺点是您不能从索引中得到任何好处,因为您必须对派生值进行排序
distance_from_test。
如果您有索引
the_value并且放宽了对平局时结果随机的要求,则可以执行一对有限范围查询,以选择紧接测试值上方的第一个值和紧接测试值下方的第一个值值并选择最接近测试值的值:
(select the_valuefrom the_tablewhere the_value >= 14order by the_value asclimit 1)union(select the_valuefrom the_tablewhere the_value < 14order by the_value desclimit 1)order by abs(the_value - 14)limit 1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)