LeetCode游戏玩法分析IV窗口函数SQL查询不通过原因排查
两段SQL执行结果差异分析
本题核心统计规则是:统计首次登录次日就再次登录的玩家占比,只有第二次登录与首次登录间隔刚好为1天的玩家才会被计入分子,不是统计所有有过连续两天登录记录的玩家。
可正常通过的SQL逻辑
它的统计逻辑完全匹配题目要求:
- temp表中给每个玩家的所有登录记录按日期升序排序,生成行号
rn,rn=2就对应该玩家的第二次登录记录 - 筛选条件同时要求
rn=2且两次登录间隔为1天,刚好命中「首次登录次日登录」的判断规则,统计的分子完全符合要求。
存在问题的SQL核心缺陷
这段SQL的统计规则和题目要求不一致:
- 只筛选了所有登录间隔为1天的记录,完全没有限制这个间隔必须是首次登录和第二次登录之间的间隔
- 只要玩家有任意一次连续两天登录的记录,不管是不是首次登录之后的次日,都会被计入分子,直接导致统计结果偏高。
你写的SQL刚好能跑对示例1,是因为示例里所有有连续登录记录的玩家,刚好连续登录发生在首次登录次日,没有例外场景。碰到下面这种反例就会直接出错:
假设某玩家的3条登录记录为:2024-01-01、2024-01-03、2024-01-04。按题目要求,这个玩家首次登录是1月1日,次日1月2日没登录,不符合统计条件,不能计入分子。但你的SQL会检测到1月3日和1月4日的间隔为1,把这个玩家算进去,结果自然不符合预期。
内容的提问来源于stack exchange,提问作者user_12
相关产品推荐
相关产品推荐

