Я создаю веб-страницу, в которой перечислены самые длинные полосы для одной команды, но я столкнулся с проблемой при попытке рассчитать полосу для комбинации связанных с этим типов результатов.
Данные представлены в таблице следующим образом …
дата результата 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?
Пронумеруемый из вашего примера кода дает следующие результаты побед / ничьих. Проблема заключалась в «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
Примечание. Код может содержать небольшую синтаксическую ошибку.