挺有意思的一道题,通过 某一 column 上下相邻 row 之间的关系,衍生出另一个行,所以要用到 UDF 类似的东西。
思路跟 Rank 那题类似:JobHoppoer-SQL-178. Rank Scores_SpartanLaser的博客-优快云博客
考点:
- 定义变量: 在 From 后进行 定义和初始化
- SQL 中 条件语句的写法
- 每经过一行就要对遍历 进行 更新,这里唯一需要 tracking的变量就是 previousNum.
SQL 代码,我也是写了一会的,没有参考讨论区答案,但是我感觉自己的方法是 复杂度 低的,不涉及任何 join
评论区有 一些答案中出现了 built-in analytics function, eg: LEAD(), LAG(), <-- TODO.
# Write your MySQL query statement below
-- Need to have CASE clause for condition checking.
SELECT DISTINCT num as ConsecutiveNums FROM
(SELECT id, num,
@consCnt:= CASE
WHEN num=@prevNum THEN @consCnt+1
ELSE 1 END AS consCnt,
@prevNum:=num FROM Logs, (SELECT @prevNum:=1, @consCnt:=0) AS Init) AS logsWithConsCnt
WHERE consCnt >=3;