2017-03-24 8 views
-1

私は基本的にそのポイントを作ったプレイヤーのIDを参照してポイントのリストを格納するMySQLテーブルを持っています。MYSQL - 連続した同一の値をカウントする

私のセットアップは次のとおりです。

CREATE TABLE `points` (
    `id` int(10) unsigned NOT NULL, 
    `player_id` int(10) unsigned NOT NULL, 
    `game_id` int(10) unsigned NOT NULL, 
    `score` int(11) NOT NULL, 
    `isScore` tinyint(1) NOT NULL, 
    `created_at` timestamp NULL DEFAULT NULL, 
    `updated_at` timestamp NULL DEFAULT NULL 
); 


INSERT INTO `points` (`id`, `player_id`, `game_id`, 
        `score`, `isScore`,  `created_at`, `updated_at`) 
VALUES 
(16, 11, 60, 4, 0, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(17, 11, 60, 5, 1, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(18, 12, 60, 6, 0, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(19, 12, 60, 7, 1, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(20, 12, 60, 8, 0, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(21, 12, 60, 9, 1, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(22, 8, 60, 10, 0, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(23, 8, 60, 11, 1, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(24, 12, 60, 12, 1, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(25, 12, 60, 13, 1, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(26, 5, 60, 14, 1, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(27, 12, 60, 15, 0, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(28, 12, 60, 16, 1, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(29, 10, 60, 17, 1, '2016-12-28 12:19:39', '2016-12-28 12:19:39'), 
(30, 10, 60, 18, 1, '2016-12-28 12:19:39', '2016-12-28 12:19:39'); 

ここでは、この設定でSQLfiddleです:http://sqlfiddle.com/#!9/f6ca9f8

私は、各プレーヤーのためのプレーヤーによって作られた最大連続ポイントの数を取得したいです。

のでsqlfiddleに結果のようなものになります。

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

次回の追加を行う必要がありますここで設定します。時にはこれらのサポートサイト(sqlfiddle)が出ていて、この状況ではあなたの質問にデータがないことがあります。 –

+0

あなたの出力を説明してください – GurV

答えて

0

あなたの質問は、いくつかのキーポイントを(しゃれが意図していない)が欠落しています。たとえば、連続する同一の値とは何か?あなたは

など、これらの値は、ID、created_atと、ID + game_id順に表示されます場合は定義する必要がありますそれでは、注文が、それはautoincremental可能性があるため、IDによって与えられ、ポイントということ、それは唯一の自然なさ をしましょう発生した順に挿入されます。プレーヤが1に前者行に1と同じであるか、またはリセットした場合

しかしながら、答えが増加カウンタ変数(ACCUM)でクエリを作成することになり、プレイヤが変更された場合:

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 
0
select distinct(player_id), MAX(score) from points group by player_id; 
関連する問題