2

多くのテーブルに「悪い」データがある状況に遭遇しました。データはさまざまなソースから相互汚染されているため、クリーンアップする必要があります。

具体的には、同じ定義を持つ数百のテーブルがあります。それらは、自動インクリメント列、時刻/日付スタンプ、およびその他のデータを備えた時限センサーデータを保持します。「悪い」データは、期待どおりに増加するのではなく、時間/日付が逆方向にジャンプすることで識別できます。

例:

10 2010/01/05 
11 2010/01/06
12 2010/01/07
13 2008/05/09
14 2008/05/10
15 2008/05/11
16 2010/01/08
17 2010/01/09

これらの領域を見つけるための最良の方法を探しています。

注意すべき点:
-問題のテーブルには数億のレコードがあります
-私の例では日付は連続しています-実際には、特定の日付に10または1000のエントリがあり(それぞれにタイムスタンプがあります)、1週間は何もありません。

それぞれを歩き、これらのジャンプを探しているperlスクリプトを想像することができます。より高速で、よりSQL風のメソッドがあるかどうか疑問に思っています。

4

1 に答える 1

0
select t.* from t, (select @maxDate := '') init
where not if(date > @maxDate, @maxDate := date, 0)
order by id

これが私が考える最速の方法です。

注:13, 14, 15あなたの例では、ID を持つレコードを取得することを期待していると思います。

于 2012-04-10T16:37:01.510 に答える