我有一个数据库表,我想选择与一对提供的值最接近的条目,无论是正数还是负数。
提供值:
num1 = 2.5, num2 = 10.2
与:相比:
[0] num1 = 1.1, num2 = 11.0
[1] num1 = 2.5, num2 = 14.1
[2] num1 = 2.4, num2 = 10.5
[3] num1 = 3.2, num2 = 10.3
我正在寻找的查询将返回行[2]。事件尽管有更接近的值,但最接近的对将是[2]。
我想在SQL select语句中处理这个问题。这就是我所拥有的,但在比较两对数字时并没有达到目标。
(SELECT * FROM table WHERE num1 < 2.5 ORDER BY num1 DESC LIMIT 1)
UNION ALL
(SELECT * FROM table WHERE num1 >= 2.5 ORDER BY num1 LIMIT 1)
UNION ALL
(SELECT * FROM table WHERE num2 < 10.2 ORDER BY num2 DESC LIMIT 1)
UNION ALL
(SELECT * FROM table WHERE num2 >= 10.2 ORDER BY num2 LIMIT 1)
这给了我4场比赛,但不是最接近的比赛。我确信我的语法遗漏了一些东西,但我找不到返回单个最接近的匹配的技巧。
所有想法都受到赞赏。
答案 0 :(得分:1)
您只需要按照聚合(或您喜欢的任何指标)对目标和记录之间的绝对距离对表进行排序:
SELECT *
FROM my_table
ORDER BY ABS(2.5-num1) + ABS(10.2-num2)
LIMIT 1
在sqlfiddle上查看。