删除重复记录1天

时间:2015-12-30 21:03:30

标签: mysql

如何根据窄时间范围参数删除重复记录?每条记录都有一个唯一的日期(数据转储日期)。重复项之间有一个共同的序列号和状态号 - 我只想从前一天或之后的一天中删除一个副本 - 并且要清楚:将来,我可能会捕获包含相同序列/状态的同一记录的另一个版本我将想要保留的数字组合 - (记录的其他方面将发生变化)。我的存档表确保根据唯一数据日期和序列号没有重复记录...但我无法弄清楚如何处理第二天显示的同一记录而没有选择只需按状态编号分组,因为该编号可以在一年内显示多次,我需要保留它们。

这是我的理论尝试,每天都会运行:

DELETE `t`
FROM `archive_table` as `t` JOIN
(SELECT `data-dump-date`, COUNT(`serial-number`)as `count` FROM 
`archive_table` 
WHERE

`data-dump-date` >= `todays-date` -1

GROUP BY `serial-number`,`status-number` HAVING COUNT(*) > 1) as `g` 
ON `t`.`data-dump-date` = `g`.`data-dump-date`
AND `t`.`serial-number` = `g`.`serial-number`

1 个答案:

答案 0 :(得分:1)

您可以选择按状态编号分组 - 只需先设置CONCAT(),这样您就可以区分该组中的数据。

SELECT data-dump-date, serial-number, count(*) FROM archive_table GROUP BY CONCAT(data-dump-date, serial-number)

稍微昂贵的查询和另外两个更好的选择是不首先写入,或者具有实际的唯一序列号。您可能会选择在写入时执行CONCAT(),因为它只会是两个字段而影响一行而不是读取,这将影响整个表格。

没有任何理由不能同时编写单个字段和CONTAT()结果,除非您介绍了字段之间存在异常的可能性,因为您已复制数据并将其写入两次。即。如果您UPDATE该行,那么您需要UPDATE该行中数据的两个副本。