Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取差异最小的范围的ID_Mysql_Sql - Fatal编程技术网

Mysql 获取差异最小的范围的ID

Mysql 获取差异最小的范围的ID,mysql,sql,Mysql,Sql,假设我有一个表a。这个表有ID,X_值,Y_值。以下是表A的内容: 表A ID X_value Y_value 1 100 150 2 110 170 3 120 190 现在,如果我将数字130与范围数字X_值-Y_值进行比较,我希望得到最小差异的范围ID!如果我能这样命名的话?现在我们看到数字130将属于所有这些范围,但我需要范围ID,在130和范围数字之间有最小的差异。要详细说明这一区别: For range 1: 130-100=30 and 150-13

假设我有一个表a。这个表有ID,X_值,Y_值。以下是表A的内容:

表A

ID X_value Y_value
1  100     150
2  110     170
3  120     190
现在,如果我将数字130与范围数字X_值-Y_值进行比较,我希望得到最小差异的范围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数据库中有这个表,这个示例的查询是什么

试试这个:

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
试试这个:

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

刚刚修改了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)

在这里检查:

刚刚修改了马哈茂德·加马尔的查询以实现以下目的:

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)

检查这里:

是否有两个ID具有相同的最小差异?事实上,不能有多个ID具有相同的最小差异。这些所谓的范围是经过仔细定义的,所以没有这种情况。是否有两个ID具有相同的最小差异?事实上,不可能有多个ID具有相同的最小差异。这些所谓的范围是经过仔细定义的,因此不存在这种情况。你的回答最适合我的问题。我认为这是一个回答,感谢你的帮助。谢谢你,卢斯卡!你的回答最适合我的问题。我认为这是一个回答,感谢你的帮助。谢谢你,卢斯卡!