Вы можете использовать следующее:
SELECT Team, TotalWins, FirstWin, LastWin
FROM ( SELECT Team,
WL,
COUNT(*) TotalWins,
MIN("Date") FirstWin,
MAX("Date") LastWin,
ROW_NUMBER() OVER(PARTITION BY Team, WL ORDER BY COUNT(*) DESC) RowNumber
FROM ( SELECT Team,
"Date",
WL,
ROW_NUMBER() OVER(PARTITION BY Team ORDER BY "Date") - ROW_NUMBER() OVER(PARTITION BY Team, WL ORDER BY "Date") Grouping
FROM T
) GroupedData
WHERE WL = 'W'
GROUP BY Team, WL, Grouping
) RankedData
WHERE RowNumber = 1;
Он использует ROW_NUMBER для ранжирования каждой игры, разделенной на команды, а также по результатам, разница между которыми уникальна для каждой группы последовательных результатов. Итак, для вашей первой команды у вас будет:
Team Date W/L RN1 RN2 DIFF
Team_1 04/01/0012 W 1 1 0
Team_1 06/01/0012 W 2 2 0
Team_1 07/01/0012 L 3 1 2
Team_1 14/01/0012 W 4 3 1
Team_1 19/01/0012 W 5 4 1
Team_1 30/01/0012 L 6 2 4
Team_1 14/02/0012 W 7 5 2
Team_1 17/02/0012 L 8 3 5
Team_1 20/02/0012 W 9 6 3
Где RN1 просто разбивается по командам, а rn2 разбивается по командам и результату.
Как видите, если убрать Поражения, то столбец DIFF увеличивается на единицу для каждой группы последовательных побед:
Team Date W/L RN1 RN2 DIFF
Team_1 04/01/0012 W 1 1 0
Team_1 06/01/0012 W 2 2 0
---------------------------------------
Team_1 14/01/0012 W 4 3 1
Team_1 19/01/0012 W 5 4 1
---------------------------------------
Team_1 14/02/0012 W 7 5 2
---------------------------------------
Team_1 20/02/0012 W 9 6 3
Затем вы можете сгруппировать по этому, чтобы убедиться, что вы смотрите на последовательные победы, и сделать подсчет, чтобы получить максимальную отдачу. Затем я просто использовал другой номер строки, чтобы получить максимальное количество последовательных побед для каждой команды.
Пример скрипта SQL
person
GarethD
schedule
24.09.2013