重複ファイルを誤ってデータベース テーブル (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
正当な理由でN回ロードされたレコードを削除せずに、タイムフレーム「2012-08-27」および「2012-09-02」のすべての重複レコードを削除したい。
注: テーブルには主キーがありません (Rowid
たとえば、MS Sqlserver のように)