MYSQL - 计算连续的相同值

时间:2017-03-24 16:11:58

标签: mysql

我有一个MySQL表,它基本上存储了一个点列表,并参考了那个点的玩家ID。

我的设置是:

+-----------+------------------------+
| player_id | max_consegutive_points |
+-----------+------------------------+
|        12 |                      4 |
|         8 |                      2 |
|         5 |                      1 |
|        10 |                      2 |
+-----------+------------------------+

以下是使用此设置的SQL提示符:http://sqlfiddle.com/#!9/f6ca9f8

我想得到每个玩家的玩家最大连续点数。

因此在sqlfiddle中,结果将类似于:

event

2 个答案:

答案 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

See SQLFiddle here

获得该表的结果,并将其放入我们可以调用" accums"的视图或临时表中,您只需要执行

SELECT player_id, max(accum) 
FROM accums 
GROUP BY player_id