SQL - 找到最接近的数字对与提供的对

时间:2013-10-28 19:43:39

标签: mysql sql postgresql

我有一个数据库表,我想选择与一对提供的值最接近的条目,无论是正数还是负数。

提供值:

 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场比赛,但不是最接近的比赛。我确信我的语法遗漏了一些东西,但我找不到返回单个最接近的匹配的技巧。

所有想法都受到赞赏。

1 个答案:

答案 0 :(得分:1)

您只需要按照聚合(或您喜欢的任何指标)对目标和记录之间的绝对距离对表进行排序:

SELECT   *
FROM     my_table
ORDER BY ABS(2.5-num1) + ABS(10.2-num2)
LIMIT    1

sqlfiddle上查看。