QGis SQL Query - «Удаление почти повторяющихся записей» - PullRequest
0 голосов
/ 29 октября 2018

У меня есть таблица с матрицей расстояний между всеми точками другой таблицы. На матрице расстояний я просто держал линии на расстоянии менее 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 Ответ

0 голосов
/ 29 октября 2018

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

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
...