Повторяющиеся альтернативные столбцы - PullRequest
1 голос
/ 28 февраля 2020

У меня есть таблица, созданная путем соединения таблицы с самим собой.

SELECT a.id id1, b.id id2, ST_Distance(a.geom, b.geom) dist
FROM yy_cluster_1 a, yy_cluster_1 b 
WHERE ST_DWithin(a.geom, b.geom, 12) AND a.id <> b.id
ORDER BY a.id, b.id

В результате получается таблица, подобная приведенной ниже слева. Я пытаюсь нумеровать строки, чтобы получить результат справа

enter image description here

Для жизни я не могу думать, как это сделать, не говоря уже о том, чтобы эффективно .

1 Ответ

2 голосов
/ 28 февраля 2020

Используйте dense_rank() вместе с least() и greatest():

SELECT 
    a.id id1, 
    b.id id2, 
    ST_Distance(a.geom, b.geom) dist,
    dense_rank() over(order by least(a.id, b.id), greatest(a.id, b.id)) new_id
FROM 
    yy_cluster_1 a
    INNER JOIN yy_cluster_1 b ON ST_DWithin(a.geom, b.geom, 12) AND a.id <> b.id
ORDER BY a.id, b.id

Обратите внимание, что я изменил ваш запрос, чтобы он выполнял явное join вместо неявного соединения старой школы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...