我有一个MySQL表,它基本上存储了一个点列表,并参考了那个点的玩家ID。
我的设置是:
+-----------+------------------------+
| player_id | max_consegutive_points |
+-----------+------------------------+
| 12 | 4 |
| 8 | 2 |
| 5 | 1 |
| 10 | 2 |
+-----------+------------------------+
以下是使用此设置的SQL提示符:http://sqlfiddle.com/#!9/f6ca9f8
我想得到每个玩家的玩家最大连续点数。
因此在sqlfiddle中,结果将类似于:
event
答案 0 :(得分:0)
select distinct(player_id), MAX(score) from points group by player_id;
答案 1 :(得分:0)
你的问题缺少一些关键点(没有双关语意)。例如:什么被认为是一个连续的相同值?您需要定义是否按ID,created_at,ID + game_id等排序列出这些值。
所以,让我们说订单是由ID 给出的,因为它可能是自动增量的,并且按照它们发生的顺序插入点是很自然的。
但是,答案是创建一个带有计数器变量(accum)的查询,如果玩家与前一行相同,则会增加;如果玩家更改,则重置为1:
select
points.id,
points.player_id,
points.game_id,
points.created_at,
@counter:=IF(@playerid=points.player_id,@counter+1,1) as accum,
@playerid:=points.player_id as current_player_id
from points,
(select @counter:=1) c,
(select @playerid:=0) p
order by points.id
获得该表的结果,并将其放入我们可以调用" accums"的视图或临时表中,您只需要执行
SELECT player_id, max(accum)
FROM accums
GROUP BY player_id