バックグラウンド
名前の長さに基づいて、重複する都市名を一時テーブルから削除します。
問題
次のクエリは、350,000 行を返します。
select
tc.id,
tc.name_lowercase,
tc.population,
tc.latitude_decimal,
tc.longitude_decimal
from
climate.temp_city tc
inner join (
select
tc2.latitude_decimal,
tc2.longitude_decimal
from
climate.temp_city tc2
group by
tc2.latitude_decimal,
tc2.longitude_decimal
having
count(*) > 3
) s on
tc.latitude_decimal = s.latitude_decimal and
tc.longitude_decimal = s.longitude_decimal
サンプルデータ:
940308;"sara" ;;-53.4333333;-68.1833333
935665;"estancia la sara";;-53.4333333;-68.1833333
935697;"estancia sara" ;;-53.4333333;-68.1833333
937204;"la sara" ;;-53.4333333;-68.1833333
940350;"seccion gap" ;;-52.1666667;-68.5666667
941448;"zanja pique" ;;-52.1666667;-68.5666667
935941;"gap" ;;-52.1666667;-68.5666667
935648;"estancia gap" ;;-52.1666667;-68.5666667
939635;"ritchie" ;;-51.9833333;-70.4
934948;"d.e. ritchie" ;;-51.9833333;-70.4
934992;"diego richtie" ;;-51.9833333;-70.4
934993;"diego ritchie" ;;-51.9833333;-70.4
934990;"diego e. ritchie";;-51.9833333;-70.4
次の行を保持して、すべての重複を削除したいと思います。
- 人口は null ではありません。と
- 名前は重複の中で最も長い (
max(tc.name_lowercase)
); と - これらの条件のいずれも満たされない場合は、保持し
max(tc.id)
ます。
指定されたデータ セットから、残りの行は次のようになります。
935665;"estancia la sara";;-53.4333333;-68.1833333
935648;"estancia gap" ;;-52.1666667;-68.5666667
934990;"diego e. ritchie";;-51.9833333;-70.4
質問
問題の基準を満たす緯度/経度の値が重複している行だけをどのように選択しますか?
ありがとうございました!