查找相同基址的lat long值不同的记录

时间:2014-12-02 16:09:35

标签: sql oracle oracle-sqldeveloper

我需要帮助在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值不同的地方。这样的多个记录存在的原因是因为它们在建筑物中是不同的单元,所以提前感谢。

1 个答案:

答案 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()不是必需的,因为我知道哪个更大,哪个更小。)