2017-11-11 113 views
0

我想获取存储行数据中与输入值最接近的行。我如何编写查询?如何在SQL中获取近似行

ex) 

index name score 
-------------------- 
    1 Jun  30 
    2 Ann -16 
    3 Mick 54 
    4 Kki  21 
... 

input : 25 
--> result : 4, Kki, 21 

回答

0

我不确定是否ex)是杂乱无章的输入或表的名称。假设您的表格被称为t,并且您的输入被存储为@input=25

set @input=cast(25 as signed); 

Select t.index, t.name, t.score 
from 
    (select 
    index 
    , abs(score - @input) 
    from t 
    order by 2 
    limit 1) as sq 
inner join t using (index); 

...如果你的表是一个临时表,它会给你一个关于不能打开同一个表两次的错误。在这种情况下,您可能需要以下代码。

create temporary table t2 like t; 
insert into t2 
    select * from t; 

...你会跟t2更换两个引用之一t。如果它是一个永久性表格,你不应该这样做。除此之外,代码的工作原理是首先找到行值和参考值之间绝对差值最小的行。 (我们进行排序,默认情况下排序从最小到最大,并限制返回到单个结果的行。)来自子查询的这一行在索引中连接回我们的表。

+0

感谢那。 – fsfmals23134