上次我们用distinct和where 查询了所有至少连续出现三次的数字,作为闯红灯的参考数据。但是数据量少的时候还可以,如果数据量一多,几万行甚至几百万行数据,这个算法的复杂度是成o(n^3)上升,我们来考虑一下如何降低算法复杂度。
方法/步骤
1
这是连续三次,如果四次,甚至多次呢,我们级联表(上千个??),这是不可能的。假设顺序连续,id被删了几个,id不连续了,那么以上方法也没法使用了。那么我们需要对结果集进行编号,让这个编号是连续的。那么这个编号最好是行号。
2
然后我们用另一种方式排序,按照num排序。
3
排序后结果如下所示:
4
通过上面的sql语句我们知道,如果是相等的,相减的值不一样。不连续的话,相减的值也不一样。
5
最后在通过num和orde两个共同分组找到一样的一共有几个,我们就可以找到连续的了
6
然后再一个表连接写法,最好不要用笛卡尔积,一万甚至十万的立方很大的。
7
lag和lead函数 取前面一条,取后面一条。
上一篇:微视怎么三连拍?3连拍如何拍摄?
下一篇:王者荣耀哪吒连招技巧