2015-05-10 3 views
2

Я использую PostgresSQL. У меня следующий состав моей таблицы GPS точек:SQL найти и удалить повторяющиеся элементы

enter image description here

Как вы можете видеть точки с id = 551071 и 551073 и 551075 имеют одинаковые координаты. Я хочу удалить их, всего 3 балла. Но проблема в том, что у меня есть набор данных из 600K объектов, и я хочу удалить все такие повторяющиеся координаты для всех пользователей. Это означает, что я хочу удалить три точки от пользователя 10. Если пользователь 11 также имеет те же координаты, то нет необходимости удалять. Как я могу это сделать?

ответ

4

Вы можете использовать exists оператор применяется на агрегированном подзапроса:

DELETE FROM my_table a 
WHERE EXISTS (SELECT b.lon, b.lat, b.user_id 
       FROM  my_table b 
       WHERE a.lon = b.lon AND 
         a.lat = b.lat AND 
         a.user_id = b.user_id 
       GROUP BY b.lon, b.lat, b.user_id 
       HAVING COUNT(*) > 1) 
Смежные вопросы