1

テーブル 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がこのすべての範囲に該当することがわかりますが、 130と範囲の番号の差が最小 (最小) の範囲の ID が必要です。その違いを詳しく説明するには:

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

この精緻化から、最小の差は 3 番目の範囲 (つまり10 ) にあることがわかるので、ID 3を取得したいと思います。MySQL データベース内にこのテーブルがある場合、この例のクエリは何になるでしょうか?!

4

3 に答える 3

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

SQL フィドルのデモ

于 2012-11-05T13:47:23.550 に答える
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
于 2012-11-05T14:01:46.490 に答える