最近值,mysql中是否为正

最近值,mysql中是否为正,mysql,function,select,Mysql,Function,Select,我想知道如何在Mysql中返回一个值,是正的还是非正的。或者,即使有一个函数可以帮助我返回 示例:从表中选择值,其中值=-10 我的回答是-10中最接近的 我很感激 Select * From `table` Order by abs(value+10) Limit 0,1 不是最有效、最优雅的解决方案,而是最简单的解决方案。您可以使用ABS函数从表中获取给定值和值之间差值的绝对值。然后按这个差值排序,以最接近的最高记录为准。大概是这样的: SELECT value, ABS(val

我想知道如何在Mysql中返回一个值,是正的还是非正的。或者,即使有一个函数可以帮助我返回

示例:从表中选择值,其中值=-10

我的回答是-10中最接近的

我很感激

Select * 
From `table`
Order by abs(value+10)
Limit 0,1
不是最有效、最优雅的解决方案,而是最简单的解决方案。

您可以使用ABS函数从表中获取给定值和值之间差值的绝对值。然后按这个差值排序,以最接近的最高记录为准。大概是这样的:

SELECT
  value,
  ABS(value - ?givenValue) AS difference
FROM
  table
ORDER BY
  difference
LIMIT
  1
差异背后的想法是,对于接近给定值的值,A-B应该接近0。使用ABS只会给出这些值与0之间的距离。因此,按该列排序应该可以得到该比较中距离0的记录

select * from table where value = 
coalesce((select max(id) from table where id <= -10), 
(select min(id) from table where id >= -10));  

是的,symcbean,它的效率低于按订单和按顶部排序的方法。但是,当我们有多个接近目标值的行时,它可以正常工作,而顶部方法则不行。

这个响应对我帮助很大。非常感谢。这是我所能想象的获得所需结果的最低效方法,比David和myselfHello symcbean使用的方法慢大约3倍,我理解。。。但是,如果值为负值,则ABS会忽略结果。。这不是个问题吗?谢谢你的帮助!进一步分析,我发现这个解决方案确实更好。。。谢谢你,大卫!也谢谢你的帮助!