【问题标题】:Find records where lat long values are different for the same base address查找相同基地址的 lat long 值不同的记录
【发布时间】:2014-12-02 16:09:35
【问题描述】:

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

【问题讨论】:

  • base address 是由什么构成的——ID 最低的那个?
  • 基地址是指地址。所有记录的值都相同。

标签: sql oracle oracle-sqldeveloper


【解决方案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(),因为我知道哪个更大哪个更小。)

【讨论】:

  • 试过了,但我收到错误消息,告诉我在预期的地方找不到 FROM 关键字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多