1

私は、mySQL で数値を数値のリストと比較して、それに最も近い数値を見つける方法を見つけようとしています。

つまり、本質的に、数字 5 と数字のリスト 7、8、9、2、1 がある場合、答えは 7 になります。

誰でもこれを行う方法について何かアイデアがありますか?

ありがとう

これが私がこれを必要とするものです。現在いる駅の ID と探しているサービスを提供するときに、特定のサービスを提供している最寄りの駅を見つけようとしています。

私のストアドプロシージャのコードは次のとおりです。

    DROP PROCEDURE IF EXISTS nearest;
    DELIMITER //
    CREATE PROCEDURE nearest
    (
        IN serviceIn VARCHAR(20), IN stationid INT
    )
    BEGIN
        SELECT station_id
        FROM station
        WHERE ABS(station_id - stationid) = (SELECT MIN(ABS(station_id - stationid))
        FROM station) AND service = serviceIn;
    END //
    DELIMITER ;
4

1 に答える 1

2

あなたはこれを行うことができます:

SELECT number
FROM tablename
ORDER BY  ABS(number - 5) 
LIMIT 1;

実際に見る


ただし、これは常に1つの数値のみを返しますが、同じ数値に近い重複した数値がある場合は、そのうちの1つだけを取得します. たとえば、リストに数字 3 がある場合、この場合、2 つの数字 7 と 3 が返されるはずですが、前のクエリはそのうちの 1 つだけを返します。

この場合、これを試してください:

SELECT number
FROM tablename
WHERE ABS(number - 5) = (SELECT MIN(ABS(number - 5))
                         FROM tablename);

実際に見てみましょう:


アップデート:

ストアド プロシージャが次のようになるように、サブクエリにも条件 `` を追加する必要があります。

DROP PROCEDURE IF EXISTS nearest;

CREATE PROCEDURE nearest
(
  IN serviceIn VARCHAR(20), IN stationid INT
)
BEGIN
  SELECT station_id
  FROM station
  WHERE ABS(station_id - stationid) = (SELECT MIN(ABS(station_id - stationid))
                                       FROM station
                                       WHERE service = serviceIn) AND service = serviceIn;
END 

更新された SQL Fiddle デモ

于 2013-04-06T20:35:10.597 に答える