题目链接:点击打开链接
题目大意:略。
解题思路:
- 解决方案(1):自定义变量,这里有个小技巧,写变量表达式的时候,不要写在一行,把从左到右转换成从上到下的顺序来看会比较好理解;"IF(@n=num, NULL, @cnt:=1)" 这一句比较关键,这里的 NULL 是真的为了满足表达式而已,没啥卵用,主要是为了不相等的时候初始化数据罢了
- 解决方案(2):自连接,"l1.Id = l2.Id - 1 AND l2.Id = l3.Id - 1" 估计这一句比较难理解,意思是 "l1.Id + 1 = l2.Id AND l2.Id + 1 = l3.Id" 这样看是不是小伙伴恍然大悟了呢~
AC 代码
--解决方案(1) SELECTDISTINCTrs.numASConsecutiveNumsFROM (SELECTnum, IF(=num, NULL, :=1), =IF(=num, +1, ) AS`cnt`, :=num :FROMLogs, (SELECT :=1, :=NULL) init) rsWHERErs.cnt>=3--解决方案(2) SELECTDISTINCTl1.NumASConsecutiveNumsFROMLogsl1, Logsl2, Logsl3WHEREl1.Id=l2.Id-1ANDl2.Id=l3.Id-1ANDl1.Num=l2.NumANDl2.Num=l3.Num;