QGis SQL Query - "Удаление почти повторяющихся записей"

У меня есть таблица с матрицей расстояний между всеми точками другой таблицы. На матрице расстояний я просто держал линии на расстоянии менее 100 метров. Я называю точки, расположенные на расстоянии менее 100 м от всех повторяющихся записей. Но в матрице расстояний каждая запись дубликатов занимает 2 строки. Матрица расстояний выглядит следующим образом:

InputID TargetID Distance

   1       2       75

   1       3       35

   2       1       75

   3       1       35

Я хотел бы сохранить только один из этих дубликатов, что означает, что в предыдущем примере я хотел бы оставить только линию 1, потому что 2 и 3 расположены на расстоянии менее 100 м от 1. Но если я оставлю только 1 на матрице расстояний, мне также нужно будет оставить только 1 на исходной таблице.

Я использую инструмент SQL Query от QGis, но я не знаю, как программировать. Кто-нибудь может мне помочь?

Спасибо!

1 ответ

Решение

Вы можете использовать некоторый подзапрос в join для получения значения для удаления

delete from my_table  m2
inner join (
  select m.distance, min(m.InputId) min_id
  from my_table  m.
  inner join (
    select distance, count(*)
    from my_table 
    group by Distance 
    having count(*) > 1 
  ) t on t.distance  = m.distance
  group by distance 
) t2 on t2.distance = m2.distance and t2.min_id  = m2.InputId
Другие вопросы по тегам