想知道是否有可能只保留一条记录以避免重复.在此场景中,ID也是重复的.我知道最好的方法是ID是唯一的,但在这个场景中不是.那么,我有三张这样的记录:

id name point closest_community_id
1 Secondary School POINT (-121.94291423 49.17457331) 126
1 Secondary School POINT (-121.94291423 49.17457331) 126
1 Secondary School POINT (-121.94291423 49.17457331) 126

我可以使用以下查询找到重复项:

    select id, name, point, closest_community_id  
    from primary_location pl 
    group by pl.id, name, point, closest_community_id
    having count(pl.id) > 1

但是,当重复项具有相同的ID时,我如何才能只保留一条记录呢?

推荐答案

使用ctid:

delete from primary_location pl
where exists
(
  select null
  from primary_location pl2
  where pl2.id = pl.id
  and pl2.name = pl.name
  and pl2.point = pl.point
  and pl2.closest_community_id = pl.closest_community_id
  and pl2.ctid > pl.ctid
);

Sql相关问答推荐

如何在VB.NET中使用MS SYS根据开始和结束期间日期进行查询

在SQL Server中使用LEFT连接包含特定记录

如何并行SELECT和RESET?

基于列对多行求和的查询

如何通过比较不同表中相同ID S的值来筛选ID为S的列表?

如何根据给定条件PostgreSQL迭代减少组中的行数

数据库SQL-CTE命名空间(错误?)使用临时视图

如何将insert语句重复n次使一个值递增?

PostgreSQL中递归CTE查询的故障过滤

如何使用jsonn_populate_record()插入到包含IDENTITY列的表中

在Postgres,什么是;.USSTZ;在';YYYY-MM-DD;T;HH24:MI:SS.USSTZ';?

从每月生成的系列中生成每日汇率

在 postgres 中插入或更新 jsonb 数组的对象

Postgres,使用 select 插入多个值

如何从postgresql中的项目映射(关联数组)设置值?

每次计数器增加时通过运行总重置进行分组

多行状态下的分组查询判断状态

使用ALTER TABLE无法删除列

SQL获取两个日期范围之间的计数

遍历数据,计算每个月最后三天的总和