0

我有这张桌子:

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 编程逻辑作为最后的措施。

4

1 回答 1

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演示

于 2013-07-25T01:17:37.193 回答