編集
+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