计算SQL Server中某个值连续出现的最大次数

计算SQL Server中某个值连续出现的最大次数,sql,sql-server,gaps-and-islands,Sql,Sql Server,Gaps And Islands,我有一张有球员、成绩和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

我有一张有球员、成绩和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
“W”的ID始终为1

我需要创建一个查询来计算每个玩家连续“W”的最大数量:

Player | MaxWinStreak
---------------------
An     | 3    
Ph     | 2
我尝试使用无边界的行,但我只能让它计算总Ws的最大数量,而不是连续的

    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

我可以采取其他方法吗?

您需要一个列来指定顺序。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;

您需要一个列来指定顺序。是否有任何列存储赢和输的顺序?@GordonLinoff我很乐意添加任何其他列,不知道如何进行此操作,您可以使用
order by(选择1)