2017-09-26 72 views
1

我有一個球員,結果和ID表:計數最大數量

Player | Result | ID 
--------------- 
An  | W  | 1 
An  | W  | 1 
An  | L  | 0 
An  | W  | 1 
An  | W  | 1 
An  | W  | 1 
Ph  | L  | 0 
Ph  | W  | 1 
Ph  | W  | 1 
Ph  | L  | 0 
Ph  | W  | 1 

A 'W' 總是會有1的ID,

我需要創建一個查詢,將計算的連續的「W的最大數目爲每個玩家:

Player | MaxWinStreak 
--------------------- 
An  | 3  
Ph  | 2 

我試圖用行無界前述但是我只能得到它來計算Ws中的總的最大數量,以及不是c連續地

Select 
    t2.player 
    ,max(t2.cumulative_wins) As 'Max' 

    From 

    ( Select 
      t.Player 
      ,Sum(ID) Over (Partition By t.Result,t.player 
      Order By t.GameWeek Rows Unbounded Preceding) As cumulative_wins 

     From 
      t 

      ) t2 

    Group By 
    t2.player 

是否有不同的方法我可以採取?

+3

你需要一個列指定的順序。 –

+1

是否有任何存儲贏利和虧損順序的列? – TechDo

+0

@GordonLinoff我很高興添加任何額外的列,不知道如何去這個壽 – PeterH

回答

3

您需要一列來指定排序。 SQL表格代表無序集合。在下面的查詢中,?表示此列。

您可以使用行數之差來獲得各連勝:

select player, count(*) as numwins 
from (select t.*, 
      row_number() over (partition by player order by ?) as seqnum, 
      row_number() over (partition by player, result order by ?) as seqnum_r 
     from t 
    ) t 
where result = 'W' 
group by player, (seqnum - seqnum_r); 

然後,您可以得到最大的:

select player, max(numwins) 
from (select player, count(*) as numwins 
     from (select t.*, 
        row_number() over (partition by player order by ?) as seqnum, 
        row_number() over (partition by player, result order by ?) as seqnum_r 
      from t 
      ) t 
     where result = 'W' 
     group by player, (seqnum - seqnum_r) 
    ) pw 
group by player; 
+0

你也許可以使用'(SELECT 1)'order? – DhruvJoshi