我有一張表,上面有城鎮、市、縣和坐標的名稱。不幸的是,一些城鎮有“近乎重復”,即存在另一行具有相同名稱、市、縣和坐標的非常靠近第一行的行。有些甚至有不止一個“接近重復”。
我怎樣才能洗掉所有這些型別的行中的一種?
我知道我可以使用 CTEROW_NUMBER() OVER(PARTITION BY name, municipality, county, latitude, longitude)來洗掉完全相同的重復項。但是,我如何檢查緯度和經度是否在彼此的范圍內0.005(= 大約 500-600 米,緯度/經度以十進制度為單位)?
樣本資料
ID Name Municipality County Lat Lng
------------------------------------------------------------
1 Springfield Simpsonville Homer 12.34567 89.01234
2 Springfield Simpsonville Homer 12.35000 89.01200
3 Springfield Simpsonville Homer 12.00000 89.00000
4 AnotherTown AnotherVille Bart 12.34567 89.01234
由于2與 同名、市、縣,且經緯度均1在十進制度以內,故視為重復,應予以洗掉。
另一方面,不在十進制度內,因此不應將其視為.0.005130.00511
預期結果
ID Name Municipality County Lat Lng
--------------------------------------------------------
1 Springfield Simpsonville Homer 12.34567 89.01234
3 Springfield Simpsonville Homer 12.00000 89.00000
4 AnotherTown AnotherVille Bart 12.34567 89.01234
uj5u.com熱心網友回復:
您可以EXISTS在DELETE陳述句中使用:
DELETE FROM tablename AS t1
WHERE EXISTS (
SELECT 1
FROM tablename t2
WHERE (t2.Name, t2.Municipality, t2.County) = (t1.Name, t1.Municipality, t1.County)
AND ABS(t2.Lat - t1.Lat) <= 0.005 AND ABS(t2.Lng - t1.Lng) <= 0.005
AND t2.ID < t1.ID
);
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419560.html
標籤:
上一篇:銷售資料查詢的SQL周數為負
