我有这张桌子:
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中实现这一点?
我正在使用Hibernate和HQL进行查询,如果可以使用HQL完成奖励积分(我对此表示怀疑)。如果没有其他办法,我愿意使用存储过程,并将java编程逻辑作为最后一种措施。
答案 0 :(得分: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 演示