我们遇到了一个意外,其中多个具有重复值的行被插入到一个表中,我需要以相当特定的格式查找哪些行。到目前为止,我有这个查询:
SELECT p2.id
FROM assignmentobject p1, assignmentobject p2
WHERE ST_Equals(p1.the_geom, p2.the_geom) AND
p1.id <> p2.id and p1.assignmentid = 15548
group by p1.id, p2.id
它比较行的几何形状,如果相同则将其吐出。ID 是主键,按顺序创建。
然而,这带来了一个问题,因为这一小部分结果显示:
p1.id p2.id
35311 35314
35311 35315
35314 35311
35314 35315
35315 35311
35315 35314
从这里可以看出,35311、35314 和 35315 具有相同的几何形状,因此,它们之间的所有组合都包含在结果中。我的目标是使用最低或最高 ID 作为“基础”,并忽略不涉及此“基础”的其他组合。即,上面显示的结果将是:
p1.id p2.id
35311 35314
35311 35315
此处省略了 31314 和 35315 之间的组合。这可以使用纯 SQL 来实现吗?