Как вычислить самую длинную непобежденную полосу с использованием MySQL?

Я создаю веб-страницу, в которой перечислены самые длинные полосы для одной команды, но я столкнулся с проблемой при попытке рассчитать полосу для комбинации связанных с этим типов результатов.

Данные представлены в таблице следующим образом …

 дата результата gf ga type compfull
 --------------------------------------------------
 1980-08-16 W 3 0 Лига 1-й дивизион
 1980-08-19 L 1 2 лиги Подразделение 1
 1980-08-23 W 3 1 лига Подразделение 1
 1980-08-26 W 2 0 Лига 1-й дивизион
 1980-08-30 D 2 2 Лига Дивизион 1
 и так далее...

Используя следующий запрос (или аналогичный), я могу определить самый длинный пробег побед или потерь или даже выигранных игр.

SELECT result, type, MIN(date) as StartDate, MAX(date) as EndDate, COUNT(*) as Games FROM (SELECT result, type, date, compfull, (SELECT COUNT(*) FROM resultengine R WHERE R.result <> RE.result AND R.date <= RE.date) as RunGroup FROM resultengine RE) A WHERE result='W' GROUP BY result, RunGroup ORDER BY Games 

Это основано на отличном ресурсе, который я нашел здесь . Он делает именно то, что я хочу, и рассказываю, что я хочу знать. То же самое относится, если я перейду на

 result='L' 

То, что я не могу решить, – это вычислить самую длинную полосу непобедимых игр, т.е. самый длинный пробег без L. И это то же самое наоборот.

Я пробовал следующий запрос безрезультатно:

 SELECT result, type, MIN(date) as StartDate, MAX(date) as EndDate, COUNT(*) as Games FROM (SELECT result, type, date, compfull, (SELECT COUNT(*) FROM resultengine R WHERE R.result <> RE.result AND R.date <= RE.date) as RunGroup FROM resultengine RE) A WHERE result!='W' GROUP BY result, RunGroup ORDER BY Games 

Я также попытался изменить запрос:

 WHERE result='W' OR result='D' 

Опять же, это не сработает. Обе попытки отражают запрос, который используется для доставки самой длинной полосы Ws или Ls, и количество моих данных в ручном режиме говорит мне, что это неверно. Я, без сомнения, пропустил что-то простое здесь, но как я могу выполнить этот запрос, поэтому он сообщает мне самую длинную полосу результатов с помощью Ls или Ws?

Related of "Как вычислить самую длинную непобежденную полосу с использованием MySQL?"

Пронумеруемый из вашего примера кода дает следующие результаты побед / ничьих. Проблема заключалась в «WHERE R.result <> RE.result», который всегда назначал разные группы для любого другого кода результата. Здесь я изменяю это предложение (и некоторые другие) для группировки «W» и «D» вместе, чтобы создать единый код:

 SELECT result, TYPE, MIN(DATE) AS StartDate, MAX(DATE) AS EndDate, COUNT(*) AS Games FROM (SELECT result, TYPE, DATE, compfull, (SELECT COUNT(*) FROM resultengine R WHERE IF(R.result IN ('W','D'),1,0) <> IF(RE.result IN ('W','D'),1,0) AND R.date <= RE.date) AS RunGroup FROM resultengine RE) A WHERE result IN ('W','D') GROUP BY IF(result IN ('W','D'),1,0), RunGroup ORDER BY Games 

Этот запрос даст вам максимальную непобежденную последовательность для одной команды (таблица содержит данные для одной команды:

 select MAX(final.win_seq_count) from (Select date,result,gf,ga,type,compfull, @seq_count:=if(result="L",0,@seq_count:=@seq_count+1) as win_seq_count, from resultengine,(select @seq_count:=0) t order by date) final 

Примечание. Код может содержать небольшую синтаксическую ошибку.