0

私はSQLにまったく強いわけではないので、ここで説明します。

doubleを含む列を持つテーブルがあります。最大差が「5」であるすべての行を選択したいと思います。

どうやってやるの?

id         value

 1         4955.54
 2         2884.32
 3         8485.45
 4         4588.54
 5         8487.62

結果

 id        value

 3         8485.45
 5         8487.62

mySQLでそれを行うにはどうすればよいですか?どうもありがとう!

4

3 に答える 3

2
select id, value from table t1 
  inner join table t2 on t1.id <> t2.id
 where ABS(t1.value-t2.value)<=5
于 2012-05-23T11:25:52.443 に答える
2

これは機能しますが、最小の差ではなく最大の差を意味します。

SELECT v.id, v.value 
FROM Values v 
WHERE EXISTS(
    SELECT null from Values v2 
    WHERE v2.id <> v.id and
    ABS(v2.value - v.value) BETWEEN 0 AND 5
)
于 2012-05-23T11:35:24.823 に答える
1

値のセットが大きい場合、非効率になる可能性があります。このクエリを効率的に作成する明確な方法はありませんが、次のようになります。

select     lo.val
,          hi.val
from       numbers lo
inner join numbers hi
on         hi.val - lo.val >= 5 

val列にインデックスが付けられている場合は、次のような別の条件を追加すると役立つ場合があります。

select     lo.val
,          hi.val
from       numbers lo
inner join numbers hi
on         hi.val > lo.val 
where      hi.val - lo.val >= 5 
于 2012-05-23T11:25:01.163 に答える