pg库中有一张表,表名为tb_kdddd_adm_pac_ftth_gis003_day,此表中在时间字段vbegday为20230712时,存在重复数据,重复数据是字段vdevid的值,也就是说,每个vdevid的值存在两条一模一样的数据,请问怎么删除表中在时间字段vbegday为20230712时的重复数据,sql语句该怎么写
时间: 2024-04-14 10:30:15 浏览: 153
要删除表中在时间字段vbegday为20230712时的重复数据,可以使用以下SQL语句:
```
DELETE FROM tb_kdddd_adm_pac_ftth_gis003_day
WHERE vbegday = '20230712'
AND vdevid IN (
SELECT vdevid
FROM tb_kdddd_adm_pac_ftth_gis003_day
WHERE vbegday = '20230712'
GROUP BY vdevid
HAVING COUNT(*) > 1
);
```
这个SQL语句使用了子查询来选择在指定日期下存在重复数据的vdevid值。然后,通过外部的DELETE语句,将符合条件的重复数据从表中删除。请确保在执行这个操作之前,先备份你的数据以防万一。
相关问题
这段sql在pg库中执行报错:column "rowid" does not exist
非常抱歉,我之前给出的SQL语句中的ROWID是Oracle数据库特有的伪列,并不适用于PostgreSQL。在PostgreSQL中,你可以使用CTID来代替ROWID。以下是修改后适用于PostgreSQL的SQL语句:
```sql
DELETE FROM tb_kdddd_adm_pac_ftth_gis003_day
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM tb_kdddd_adm_pac_ftth_gis003_day
WHERE vbegday = '20230712'
GROUP BY vdevid
HAVING COUNT(*) > 1
) AND vbegday = '20230712';
```
这个SQL语句使用了CTID来选择在指定日期下存在重复数据的vdevid值。然后,通过外部的DELETE语句,删除除了每个重复数据中的最小CTID对应的记录之外的所有记录。这样可以保留一条重复数据。
请确保在执行这个操作之前,先备份你的数据以防万一。
阅读全文