Выберите уникальные упорядоченные значения нескольких столбцов в sql

Я использую таблицу с парой геометрий в каждом ряду. Мне бы хотелось, чтобы каждая геометрия появлялась в моей базе данных только один раз. Я отсортировал пару по расстоянию. Мне удалось получить различный geom1 или geom2, но никогда в одно и то же время. Идентификаторы связаны с их соответствующими геометриями.

| id1 | id2 | distance|        | id1 | id2 | distance|
|  1  |  2  |    3    |        |  1  |  2  |    3    |
|  2  |  1  |    4    |    ->  |  2  |  1  |    7    |
|  2  |  2  |    7    |
|  1  |  1  |    9    |

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

Спасибо,

2 ответа

Вы, кажется, хотите:

select t1.*
from table t1
where id2 = (select max(t1.id2) from table t2 where t2.id1 = t1.id1);

Если я правильно понимаю, вы ищете разные тройки id1, id2 и расстояния:

SELECT DISTINCT id1, id2 , distance FROM <table name>;

или же

SELECT id1, id2 FROM <table name> GROUP BY id1, id2, distance;
Другие вопросы по тегам