我需要帮助在Oracle SQL Developer中编写查询,该查询找到一个属性匹配但相应属性不同的地方。例如,我需要查找地址字段匹配的记录,但纬度和经度列的值与相应的记录不同。
这是我所谈论的一个例子(记录#3是问题):
ID Address latitude longitude
1 1104 West St 35.3 -90.1
2 1104 West St 35.3 -90.1
3 1104 West St 36.4 -94.2
这一点是要找到相同基址的lat long值不同的地方。这样的多个记录存在的原因是因为它们在建筑物中是不同的单元,所以提前感谢。
答案 0 :(得分:1)
如果要查看详细记录,请使用分析函数。我们的想法是计算每个地址的最小和最大纬度和经度,然后进行比较:
select ID, Address, latitude, longitude
from (select t.*,
min(latitude) over (partition by address) as minlat,
max(latitude) over (partition by address) as maxlat,
min(longitude) over (partition by address) as minlong
max(longitude) over (partition by address) as maxlong
from table t
) t
where minlat <> maxlat or minlong <> maxlong
order by address, id;
如果值实际存储为浮点数,那么您可能需要一点摆动空间:
where (maxlat - minlat) > 0.00001 or (maxlong - minlong) > 0.00001
(注意:abs()
不是必需的,因为我知道哪个更大,哪个更小。)