2016-03-18 7 views
0

テーブルから「重複」と考えられる特定のレコードを削除する必要があります。彼らは正確にすべての列の値が同じではないので、正確に重複していません。 col_acol_bは、いくつかの行で同じ値を持ち、かつ(タイムスタンプである) col_cは、たとえば、内の他の各 の5分で、その後、削除した場合MySQLで「重複」レコードを削除するには?

:むしろ、ロジックはこのようなものです最も早い行がある行以外のすべての行 タイムスタンプ。

例データ:

id col_a col_b  col_c 
1  foo  bar  2016-01-01 00:00:00 
2  foo  bar  2016-01-01 00:00:12 
3  foo  bar  2016-01-01 00:00:22 
4  foo  bar  2016-01-05 00:00:00 
5  apple banana 2016-01-01 00:00:00 
6  apple banana 2016-01-05 00:00:00 

上記の例では、私は、ID = 2、ID = 3を削除したいのMySQLで行うことは可能、このですか?

+0

同じcola_aとcol_bを持つレコードが複数ある場合はどうなりますか? 1番目と最後のレコードの時差は10分(5分の許容範囲外)としますが、連続するレコード間に5分未満の差がありますか?あなたはすべてを削除しますが、イーリーリーズのレコードは、または最も早いものから5分後に他のものを削除しますか? 5分間隔ごとにすべての重複を削除し、その間隔から最も古いタイムスタンプのみを保持することは容認できますか? – Shadow

+0

はい、私はそう思います。 「正当な」記録は、少なくとも2時間離れており、しばしば離れている。私のアプリでは非常に奇妙なバグのために、必要なレコード以上が挿入されています。アプリケーションで実際に問題を引き起こすわけではありませんが、ちょっとテーブルを整理したいだけです。 – StackOverflowNewbie

+0

それで、確認として...私たちがレコード(同じcol_aとcol_b)を持っていて、col_cの時間が4分離れているシリーズで... 06:15、08:30、08:34、08:38、08 :42など、私たちは06:15と08:30を保持しますが、08:34、08:38、08:42は削除します。つまり...前の5分以内に別の行(同じcol_a、col_b)がある限り、そのレコードを削除する必要があります。その前のレコードも削除される場合でも。 – spencer7593

答えて

0

私は、これは

DELETE FROM tab 
WHERE ID IN(
select t1.id 
FROM tab as t1 JOIN tab as t2 
ON t1.col1=t2.col1 AND t1.col2 = t2.col2 
WHERE DATE_DIFF(MINUTE, t1.col3, t2.col3) < 5 
AND DATE_DIFF(MINUTE, t1.col3, t2.col3) > 0) 

がテーブルに参加して、すべての重複を取得するトリックを行うことができると思います。これらの複製では、時間制約を満たすもののみを選択します。注:> 0 and not >=0

+0

私は 'DATE_DIFF'関数がSQL Serverに固有だと思います。 MySQLで最も近いのは 'TIMESTAMPDIFF'です。 MySQLでは、 'd.col_c spencer7593

関連する問題