1

正か負かにかかわらず、提供された値のペアに最も近いエントリを選択したい DB テーブルがあります。

指定された値:

 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 つではありません。私の構文には何かが欠けていると確信していますが、最も近い単一の一致を返すためのトリックが見つかりません。

すべてのアイデアに感謝します。

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 に答える