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 个条目(每个条目都有时间戳),然后一周内什么都没有.

我可以想象一个 perl 脚本遍历每个并寻找这些跳转。我想知道是否有更快、更 sql-esque 的方法。

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 回答