0

我根本不擅长 SQL,所以这里是:

我有一个包含双精度列的表。我想选择它们之间最大差异为“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 回答