SQL复杂查询:连续次数、
180.连续出现的数字
查找表:Logs中连续出现3次以上的数字
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
返回的结果表中的数据可以按 任意顺序 排列
示例:
连续性问题:
1. 找到连续的特点(e.g. 行号 - 分组行号 = k)
2. 根据值和特点进行Group By
3. Having筛选连续次数
4. 做出指定输出(e.g. 输出连续3次出现的数字,输出用户连续登录3天以上连续的次数、用户数……)
注意一:Id-rownum的值是一致,数字不一定连续
注意二:Id-rownum不恒大于0,如果是负数,我们将会得到bigint unsigned的错误提示
连续性模板:
SELECT DISTINCT Num ConsecutiveNums FROM( SELECT *, ROW_NUMBER() OVER (PARTITION BY Num ORDER BY Id) rownum, //行数 ROW_NUMBER() OVER (ORDER BY Id) id2 //新行号 FROM LOGS ) t GROUP BY (id2-rownum),Num //按照行号-分组行号 & 数字 进行分组 HAVING COUNT(*)>=3