MySQL - 获取具有特定值的最长行链

时间:2014-11-03 14:35:22

标签: mysql

为了解决这个问题,我可以简化我的表结构:

http://sqlfiddle.com/#!2/dcdd3/1

我希望获得每个用户最长的连胜纪录(即最大数量的连续胜利= 1行,中间没有胜利= 0行,以下列格式返回:

user_id | win_streak
--------------------
1       | 5
2       | 3
3       | 3

我目前的解决方案是获取所有行并在PHP foreach循环中构建结果,但我不能认为有一种方法可以在MySQL中执行此操作。

2 个答案:

答案 0 :(得分:1)

您需要一个定义胜利顺序的列。我假设这是auto_increment列id

select
user_id, max(wins) as longest_winning_streak
from (
SELECT 
ugr.*
, @winstreak := if(@prev_user = user_id, if(won = 1, @winstreak + 1, 0), 1) as wins
, @prev_user := user_id
FROM `user_game_results` ugr
, (SELECT @winstreak := 0, @prev_user := null) var_init
ORDER BY user_id, id
) sq
group by user_id

您想要的结果不太正确,user_id连续3胜。

答案 1 :(得分:0)

看一下之前的答案:

http://stackoverflow.com/questions/15484908/mysql-count-the-number-of-consecutive-times-a-value-appears