假设我有一张表A.这张表有ID,X_value,Y_value。以下是表A的内容:
表A
ID X_value Y_value
1 100 150
2 110 170
3 120 190
现在,如果我将数字 130 与范围数字(X_value - Y_value)进行比较,我想获得具有最小(最小)差异的范围ID!如果我可以这样说出来的话?马上我们看到数字 130 将落在所有这些范围内,但我需要范围的ID,其中 130 与范围数之间的最小(最小)差异。要详细说明这一点:
For range 1: 130-100=30 and 150-130=20
For range 2: 130-110=20 and 170-130=40
For range 3: 130-120=10 and 190-130=60
从这个细节我们看到最小差异在第三个范围(即 10 )所以我想得到ID 3 。如果我在MySQL db中有这个表,那么这个例子的查询是什么?!
答案 0 :(得分:2)
试试这个:
SELECT *
FROM Table1
WHERE ID IN
(
SELECT ID FROM
(
SELECT
ID,
130 - x_value xdiff,
y_value - 130 ydiff
FROM Table1
ORDER BY xdiff ASC LIMIT 1
) t
)
这会给你:
ID X_VALUE Y_VALUE
3 120 190
答案 1 :(得分:2)
刚刚修改了Mahmoud Gamal的查询来解决这个问题:
SELECT *
FROM Table1
WHERE ID IN
(
SELECT ID FROM
(
SELECT
ID,
CASE
WHEN (130 - x_value > y_value - 130) THEN y_value - 130
ELSE 130 - x_value
END
FROM Table1
where 130>=x_value and 130<=y_value
ORDER BY 2 ASC LIMIT 1
)t)
答案 2 :(得分:0)
select *
from yourtable
order by case when ABS(x-130)<ABS(y-130) then ABS(x-130) else ABS(y-130) end
limit 1
或
select id
from
(select id,x from yourtable union select id,y from yourtable) v
order by ABS(x-130)
limit 1