多语言展示
当前在线:132今日阅读:179今日分享:36

数据库:查找所有至少连续出现三次的数字(2)

上次我们用distinct和where 查询了所有至少连续出现三次的数字,作为闯红灯的参考数据。但是数据量少的时候还可以,如果数据量一多,几万行甚至几百万行数据,这个算法的复杂度是成o(n^3)上升,我们来考虑一下如何降低算法复杂度。
方法/步骤
1

这是连续三次,如果四次,甚至多次呢,我们级联表(上千个??),这是不可能的。假设顺序连续,id被删了几个,id不连续了,那么以上方法也没法使用了。那么我们需要对结果集进行编号,让这个编号是连续的。那么这个编号最好是行号。

2

然后我们用另一种方式排序,按照num排序。

3

排序后结果如下所示:

4

通过上面的sql语句我们知道,如果是相等的,相减的值不一样。不连续的话,相减的值也不一样。

5

最后在通过num和orde两个共同分组找到一样的一共有几个,我们就可以找到连续的了

6

然后再一个表连接写法,最好不要用笛卡尔积,一万甚至十万的立方很大的。

7

lag和lead函数 取前面一条,取后面一条。

推荐信息