mySQL比较数字

时间:2013-04-06 20:24:48

标签: mysql sql numbers compare

我试图在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 ;

1 个答案:

答案 0 :(得分:2)

你可以这样做:

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

在行动中看到它


但是这总是只返回一个数字,但如果有重复的数字接近相同的数字,它将只获得其中一个。例如,如果列表中有数字3,则在这种情况下应该返回两个数字7和3,前一个查询将只返回其中一个。

对于这种情况,请尝试:

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 

Updated SQL Fiddle Demo