我创建了一个类似的帖子,并认为我有答案,但我没有。我想做的是在给定位置栏与众不同的情况下,根据给定的纬度和经度来获取最近的城市/城镇。如果您在下面的屏幕快照中看到两次弹出了Orlando的位置,那么我想使该列与众不同,以便它可以忽略第2条Orlando记录。给定(28.458414,-81.395258)的点,我正确地获得了最近的城市/城镇。问题是,我有许多大城市的记录,这些大城市在同一城市中具有不同的坐标,如果您看到我对奥兰多2条记录的坐标略有不同。任何建议都很好。我正在使用postgres 10
SELECT location,ABS(28.458414 - latitudes) + ABS(-81.395258-longitudes) as distance FROM zips
group by location,latitudes,longitudes
ORDER BY distance asc limit 5
我也做过
SELECT distinct location, ABS(28.458414 - latitudes) + ABS(-81.395258-longitudes) as distance FROM zips
ORDER BY distance asc limit 5
这用于向用户显示城镇附近的选项,并且两次显示2个城镇/城市看起来是错误的。
答案 0 :(得分:1)
不确定您要忽略奥兰多的第二条记录。如果有一个ID列指示行的顺序,则可以使用row_number()
或DISTINCT ON
获得最高或最低的结果。您可以尝试使用MIN
或MAX
,从group by
删除经纬度
SELECT location,MIN(distance) as distance
FROM
(
SELECT location, ABS(28.458414 - latitudes) + ABS(-81.395258 -longitudes )
as distance FROM zips
) group by location
ORDER BY distance asc limit 5;