2013-07-24 57 views
0

我有这个表:在连续行的行选择MySQL的最大数量

player_id goals date 
1   0  16/06 
1   1  17/06 
1   4  18/06 
1   1  19/06 
1   0  20/06 

我需要的是获得连续的比赛中球员得分1至少一个目标的数量。

在这个例子中,查询的结果应该是这样的:

player_id num_continuous_days 
1   3 

行的顺序是日期列。是否有可能在MySQL中实现这一点?

我使用HQL和HQL进行查询,如果可以使用HQL(我怀疑它)完成了奖励积分。如果没有其他解决方法,我愿意使用存储过程,并将java编程逻辑作为最后一项措施。

+0

这个链接看起来像它可能为你工作。我会把它作为答案,但我从来没有尝试过,并且由于时间限制无法使其与当前问题相匹配。祝你好运。 http://www.artfulsoftware.com/infotree/qrytip.php?id=803 – JClaspill

+0

你可以在这里找到一些帮助:http://stackoverflow.com/questions/13456857/selecting-continuous-block-of-records-in -mysql –

+0

如果玩家在给定的时间段内有多个连续的匹配,那么您希望的输出是什么? – peterm

回答

1

尝试

SELECT player_id, COUNT(*) num_continuous_days 
    FROM 
(
    SELECT player_id, goals, date, IF(goals = 0, @n := @n + 1, @n) g 
    FROM Table1, (SELECT @n := 0) n 
    ORDER BY player_id, date 
) q 
WHERE goals > 0 
GROUP BY player_id, g 

输出:

 
| PLAYER_ID | NUM_CONTINUOUS_DAYS | 
----------------------------------- 
|   1 |     3 | 

这里是SQLFiddle演示

+0

为了只获得最大天数,我重新做了一点。完美的作品!谢谢 ! – user2593577

+0

@ user2593577太好了。你非常欢迎:) – peterm