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