MariaDB/MySQL:查询每个puuid的win=1最大连续行数
解决方案
假设你的表名为game_records,包含puuid、game_creation、win字段,可以用窗口函数实现需求,具体SQL语句如下:
WITH ranked_games AS ( -- 按puuid分组,game_creation降序排序,给所有行编号 SELECT puuid, win, ROW_NUMBER() OVER (PARTITION BY puuid ORDER BY game_creation DESC) AS rn FROM game_records ), win_streaks AS ( -- 筛选win=1的记录,计算连续分组的标识 SELECT puuid, rn - ROW_NUMBER() OVER (PARTITION BY puuid, win ORDER BY rn) AS streak_group FROM ranked_games WHERE win = 1 ), streak_counts AS ( -- 统计每个连续组的行数 SELECT puuid, COUNT(*) AS streak_length FROM win_streaks GROUP BY puuid, streak_group ) -- 取每个puuid的最大连续行数 SELECT puuid, MAX(streak_length) AS max_win_streak FROM streak_counts GROUP BY puuid;
逻辑说明
- ranked_games:先按玩家(puuid)分组,将每个玩家的对局按
game_creation倒序排号,确保最新的对局排在前面。 - win_streaks:只保留胜利(win=1)的对局,通过
rn减去同玩家同胜利状态下的排号,得到连续胜利的分组标识——连续的胜利对局这个差值会保持一致,非连续的则会变化。 - streak_counts:统计每个连续胜利组的对局数量。
- 最后一步汇总每个玩家的最大连续胜利数。
如果你的表名或字段名和假设不一致,直接替换对应名称即可。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

