2017-11-11 3 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); 

...テーブルが一時テーブルの場合、同じテーブルを2回開くことができないというエラーが表示されます。その場合は、次のコードが必要になることがあります。

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

...あなたはt2tに2つの参照のいずれかを置き換えると思います。永久的なテーブルの場合は、それを行う必要はありません。

これ以外にも、コードは、行の値と参照値の絶対差が最も小さい行を最初に見つけることによって機能します。 (ソートはデフォルトで最小から最大まで並べ替えられ、返される行は単一の結果に制限されます)。サブクエリからのこの単一の行は、インデックスのテーブルに戻って結合されます。

+0

ありがとうございます。 – fsfmals23134

関連する問題