背景
从网上爬取了一些基金股票持仓数据,导入到了数据库。但是数据库表当时没有创建索引。导致出现数据重复。如下
爬取的数据重复了,比如前两条,除了id,其他都是一样的,现在需要只保留一条,网上的一些解决方案,都是一些按照单个字段分组,然后进行删除,在这里就不适用了。
分析
这里边,基金代码fund_code,股票代码sec_code,季度quarter_date三者才构成唯一性,所以要根据这三者删除重复数据。思路:先分组查找,然后创建临时表,删除原来的表,更改表名。
实现
由于fund_code, sec_code, quarter_date这三个字段构成唯一性,所以直接按照这三个字段分组查找,并创建临时表tmp
CREATE TABLE tmp SELECT * FROM fund_position GROUP BY fund_code, sec_code, quarter_date;
删除原来的表,修改新表的表名
DROP FROM fund_position;
ALTER ALTER tmp RENAME TO fund_position;