我正在使用Hive,所以是HiveQL。
我的数据看起来像这样:
placename | Value | id
A | 1.1 | 1
A | 1.05 | 2
A | 2 | 3
A | 3 | 4
B | 2 | 1
B | 5 | 2
B | 2.1 | 3
B | 7 | 4
C | 1 | 1
C | 2 | 2
C | 3 | 3
C | 17 | 4
C | 17.11 | 5
C | 17.6 | 6
最终,我正在尝试查找在给定范围内具有多个“值”的地名和ID的列表。
我不确定-我不是SQL专家,也无法访问组织中的任何人。
例如
如果我有一个参数valuerange,我想查找在另一个值的valuerange中有多个Value的所有地名和id。因此,在valuerange为0.5的情况下,我将返回:
因为A具有1.1和1.05-彼此之间在0.5之内,对于B和C依此类推。B-1和B -3在这里是因为2.1和2的值在0.5之内。
因为17、17.11、17.6在0.5以内,所以发现C -4,5、6。 17在17.11的0.5以内,而17.6在17.11的0.5以内。答案 0 :(得分:2)
您需要表的自连接以及ON子句中valuerange的条件:
timestamp
或带有EXISTS:
select distinct t.placename, t.id
from tablename t inner join tablename tt
on t.placename = tt.placename
where t.id <> tt.id and tt.value between t.value - 0.5 and t.value + 0.5
order by t.placename, t.id
请参见demo(用于SQL Server,但是由于代码是标准SQL,我想它也适用于Hive)。
结果:
select distinct t.placename, t.id
from tablename t
where exists (
select 1 from tablename
where placename = t.placename and id <> t.id
and value between t.value - 0.5 and t.value + 0.5
)
order by t.placename, t.id