0

+------+
| | 値 |
+------+
| | 13.00 |
| | 15.00 |
| | 17.50 |
| | 18.00 |
| | 18.10 |
| | 18.30 |
| | 19.90 |
| | 20.00 |
| | 20.30 |
| | 20.60 |
+------+

SELECT * FROM `table` WHERE `value` = 19;

value18.00 から 20.60 (プラスまたはマイナス 2)を含む行を取得したい

No.19 POSTで届きました。

4

2 に答える 2

0

編集

+2 または -2 の範囲が必要な場合、最も効率的な方法は次のとおりです。

SELECT t.*
  FROM `table` t
 WHERE t.value >= 19 - 2.0
   AND t.value <= 19 + 2.0
 ORDER BY t.value

オリジナル

値が 19 に「最も近い」7 行から値列だけを取得するには、19valueと列の値の差を計算し、差の絶対値を取得して、それで並べ替えます。次に、返される行数を制限します。

SELECT s.value
  FROM (
         SELECT s.value
           FROM `table` s
          ORDER BY ABS(19.0-s.value)
          LIMIT 7
       ) s
 ORDER BY s.value

行全体を取得するには、値が 19 に「最も近い」行について、同じクエリを実行できますが、行から一意の識別子を取得してから、元のテーブルへの結合を実行します。次に例を示します。

SELECT t.*
  FROM (
         SELECT r.id
              , r.value
              , ABS(19.0-r.value) AS `absdiff`
           FROM `table` r
          ORDER BY ABS(19.0-r.value)
          LIMIT 7
       ) s
  JOIN `table` t
    ON t.id = s.id
于 2013-07-08T18:22:41.810 に答える