我错误地将重复文件加载到数据库表中(IBM DB2 v9.7)。我需要删除重复记录而不删除有效数据。
最初,我认为HAVING count(*) > 1
可以解决我的问题,但这不起作用。我们的供应商生产具有修改规格的零件,因此一个文件可能会多次加载有效数据。
我知道几件事:
- 我的重复记录的日期范围:“2012-08-27”和“2012-09-02”之间
- 用于验证数据的属性
这是我识别骗子的 SQL 代码:
SELECT CAST(ENDDATE AS DATE) ENDDATE,CAST(LOADEDON AS DATE),SUBSTR(SITEID,1,20) SITEID,SUBSTR(LOCATIONNAME_1,1,20),SUBSTR(RID,1,15),COUNT(RID) FROM AUTOMATION WHERE CAST(ENDDATE AS DATE) BETWEEN '2012-08-27' AND '2012-09-02' GROUP BY CAST(ENDDATE AS DATE),CAST(LOADEDON AS DATE),SUBSTR(SITEID,1,20),SUBSTR(LOCATIONNAME_1,1,20),SUBSTR(RID,1,15) ORDER BY 5 ASC FOR FETCH ONLY WITH UR
编辑:可用于指定重复的列集是 RID、LOADEDON 和 FILENAME(此处未显示)。
这是一个示例输出
08/29/2012 09/05/2012 JGS Memphis JGS Memphis 029369751671 518
09/01/2012 09/05/2012 Reynosa Reynosa 029054883474 521
08/29/2012 09/05/2012 JGS Memphis JGS Memphis 028881223425 522
我想删除时间范围“2012-08-27”和“2012-09-02”中的所有重复记录,而不删除出于合法原因加载 N 次的记录。
注意:该表没有主键(例如Rowid
在 MS Sqlserver 中)