在SQL中选择几列的唯一有序值

时间:2018-06-28 12:22:31

标签: sql postgresql greatest-n-per-group columnsorting

我使用的表每行都有几个几何。我希望每个几何图形在我的数据库中仅出现一次。我按距离对这对夫妇进行了排序。我成功拥有了不同的geom1或geom2,但从未同时使用过。这些ID链接到它们的相关几何。

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

我的表包含超过200万行,因此性能是一个问题。 我教过要创建几个临时表,在其中我先对id1进行分组,然后对id2进行分组,收集丢失的值并一次又一次地进行分组...但是,如果有人有更好的主意,那就太好了。

谢谢

2 个答案:

答案 0 :(得分:0)

如果我正确理解,您正在寻找id1,id2和距离的三重组合:

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

SELECT id1, id2 FROM <table name> GROUP BY id1, id2, distance;

答案 1 :(得分:0)

您似乎想要:

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