1

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

提供的值:

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

所有想法都表示赞赏。

4

1 回答 1

1

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

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

sqlfiddle上查看。

于 2013-10-28T19:47:21.033 回答