我有一个大型的基于坐标的城市数据集,其中每个城市都有一个分数和一组坐标,这些坐标指示得分的确切位置。
数据集中没有重复的城市名称,因为我已经清理了数据,从每个城市字符串示例中只取最高分。然而,有些地方包括一个城市的多个行政区,例如布鲁克林,皇后区等,在世界各地的一些地方,如迪拜,有数百个这样的行政区。
| 城市|得分|纬度|经度|
| - ------|- ------|- ------|- ------|
| 纽约|一百|x|Y型|
| 新加坡|九十八点五|x|Y型|
| 多伦多|九十六点七|x|Y型|
| ...||||
我有代码可以计算两个纬度/经度点之间的差异,在SQL中运行良好。我需要做的是在我的数据集中运行它,并找到最小距离,只有上面的行正在计算,所以如果在我的多伦多上面的表中,它会找到多伦多和纽约,多伦多和新加坡之间的最小距离,然后显然返回多伦多/纽约的结果。
然后,我可以通过这个最小距离进行过滤(比如WHERE最小距离〉4000),以防止这些多个自治市出现,从而使我的数据集变得有用。
因为我只对每个城市的最高分感兴趣,所以我只需要计算每种情况下与上面几行的距离,因为下面几行的分数总是较低,希望这有意义。
我还没有能够尝试任何东西沿着上面提出的路线,我已经尝试搜索如何运行类似于SQL中的for循环,但不确定如何使它只分析表中上面的行。
2条答案
按热度按时间2izufjch1#
好吧,假设“above”表示比current小的id,并且假设您需要最近城市id的新列-
iq3niunx2#
示例架构和数据:
质询:
具体步骤如下:
cte
计算给定城市与之前所有城市之间的距离(c1.id > c2.id
)cte2
按距离对每个城市的邻近城市排序,并给它们一个等级(partition by city1 order by dist asc
))cte3
选择距离最近的城市(row_number = 1
)