我遇到过许多表中存在“坏”数据的情况。数据已被各种来源交叉污染,我需要清理它。
具体来说,有几百个表具有相同的定义。它们通过自动增量列,时间/日期戳和其他数据保存定时传感器数据。 “坏”数据可以通过向后跳跃而不是按预期增长来识别。
示例:
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方法。
答案 0 :(得分:0)
select t.* from t, (select @maxDate := '') init
where not if(date > @maxDate, @maxDate := date, 0)
order by id
这是我能想到的最快的方式。
注意:我假设您希望在示例中获得ID为13, 14, 15
的记录。