首页 > 解决方案 > 选择表中的异常值

问题描述

我有一个大约 100 000 个名称/行的表,看起来像这样。大约有 3000 种不同的 Refnr。这些名称在地理上聚集在 Refnr 周围。问题是有些名称的位置错误。我需要找到不适合其他行的行。我想我可以通过在相同 Refnrs 的其余部分中找到与经度和纬度相距太远的纬度或经度来做到这一点。因此,如果您看到第一个 Refnr,它们中的两个位于纬度 10.67xxx,而 1 位于纬度 10.34xxx。

因此,如果我说我想比较不同 Refnrs 中的所有名称,并找出第 2 个十进制数字与其余名称的不同之处。

有什么办法可以让我不必手动运行查询 3000 次?

参考 纬度 经度 姓名
123 10.67643 50.67523 鲍勃
123 10.67143 50.67737
123 10.34133 50.67848
234 11.56892 50.12324 伯尼
234 11.56123 50.12432 漂亮的
234 11.98135 50.12223 阿比
567 10.22892 50.67143 无所谓
567 10.22123 50.67236 蒂蒂
567 10.22148 50.22422 比利

我需要一个选择来给我这个。

参考 纬度 经度 姓名
123 10.34133 50.67848
234 11.98135 50.12223 阿比
567 10.22148 50.22422 比利

谢谢您的帮助。

标签: sqlsql-server

解决方案


这会平均位置的中心并寻找远离它的位置

SELECT *
,  ABS((SELECT Sum(Latitude) / COUNT(*) FROM #Test) - Latitude) 
+  ABS((SELECT Sum(Longitude) / COUNT(*) FROM #Test) - Longitude) as Awayfromhome
from #Test
Order by Awayfromhome desc

推荐阅读