在数据库测试上线后,会遇到数据库中的重复数据问题,即只有主键不同,其他核心要素相同,对于冗余、统计来说都是个问题,因此需要清理重复数据,相同的内容只保留一个即可。
本来我还以为这种需求没有办法用sql解决,之前遇到类似的问题,都是通过手工的方式解决的。搜索后发现这个可以用SQL直接解决:即使用ctid这个变量名。
在数据中心的实际使用中,比如用户的下载记录中的重复数据,可以使用下述SQL来解决:
delete from dataorder where ctid not in ( select min(ctid) from dataorder d where status in (0,5) and ts_approved>'2007-12-31' and ts_approved<'2009-1-1' group by userid,uuid,status,onlineappid,offlineappid,extract(month from ts_approved) ) and d.status in (0,5) and d.ts_approved>'2007-12-31' and d.ts_approved<'2009-1-1'
参考:
PostgreSQL删除重复数据
发表回复