Я относительно новичок в SQL и впечатлил себя, просто добравшись до вывода ниже.
Столбцы «HomeTeamSequence» и «AwayTeamSequence» являются последними двумя результатами для домашней команды и команды гостей соответственно.«FTR» - фактический результат этого конкретного совпадения.
with games as (
SELECT t.Div, t.Date, t.HomeTeam, t.AwayTeam, t.FTHG, t.FTAG, t.FTR,
t.MatchID, U.team_id
FROM All_Games.[dbo].[All_Games_Full] t
cross apply (values(HomeTeam), (AwayTeam)) as u(team_id)
),
games_update as (
select *,
case when HomeTeam = team_id and FTR = 'H' then 'HW'
WHEN HomeTeam = team_id and FTR = 'D' then 'HD'
WHEN HomeTeam = team_id and FTR = 'A' then 'HL'
when AwayTeam = team_id and FTR = 'A' then 'AW'
WHEN AwayTeam = team_id and FTR = 'D' then 'AD'
WHEN AwayTeam = team_id and FTR = 'H' then 'AL'
ELSE NULL END NewFTR
from games
), seq as (
select MatchID, Div, Date, team_id,
concat(case when LAG(team_id,2) over (order by team_id, Date) != team_id then null else LAG(NewFTR, 2) OVER (ORDER BY team_id, Date) end, ' ' ,
case when LAG(team_id,1) over (order by team_id, Date) != team_id then null else LAG(NewFTR, 1) OVER (ORDER BY team_id, Date) end) as lastgame,
NewFTR AS latestgame
from games_update
)
select a.MatchID, a.Div, a.Date, a.HomeTeam, a.AwayTeam,
case when a.HomeTeam = b.team_id then b.lastgame end HomeTeamSequence,
case when a.AwayTeam = c.team_id then c.lastgame end AwayTeamSequence,
a.FTR
from All_Games.[dbo].[All_Games_Full] a
left join seq b
on a.MatchID = b.MatchID and a.HomeTeam = b.team_id
left join seq c
on a.MatchID = c.MatchID and a.AwayTeam = c.team_id
where a.Div = 'SP1'
ORDER BY MatchID
пример вывода:
MatchID Div Date HomeTeam AwayTeam HomeTeamSequence AwayTeamSequence FTR
135038 SP1 1995-10-01 La Coruna Albacete HW AD AL HW H
135039 SP1 1995-10-01 Merida Salamanca HL AL AL HD D
135040 SP1 1995-10-01 Oviedo Betis AW HD AW HD A
135041 SP1 1995-10-01 Sevilla Ath Madrid HW AD AW HW D
135042 SP1 1995-10-01 Valladolid Tenerife HD AD AD HD H
135043 SP1 1995-10-01 Vallecano Valencia HL AL AW HD H
135044 SP1 1995-10-01 Zaragoza Compostela HL AD AD HW H
135045 SP1 1995-10-04 Albacete Valladolid HW AL AD HW H
135046 SP1 1995-10-04 Barcelona Oviedo HW AD HD HL H
Что я пытаюсь достичь, это следующая матрица (просто образецкомбинации заголовок / строка).Сосредоточив внимание на 'FTR' = 'H':
AD AD AD AL AD AW AD HD AD HL
AD AD 0 0 0 0 0
AD AL 0 0 0 0 0
AD AW 0 0 0 0 0
AD HD 3 0 1 1 1
AD HL 1 2 3 2 2
AD HW 1 3 3 1 1
AL AD 0 0 0 0 0
AL AL 0 0 0 0 0
Я добавил следующее в вышеупомянутый запрос, чтобы проверить несколько комбинаций, но он не выглядит близко.
select
case when HomeTeamSequence = 'HW HW' THEN COUNT(*) else 0 END 'HW HW',
case when HomeTeamSequence = 'HW HD' THEN COUNT(*) else 0 END 'HW HD',
case when HomeTeamSequence = 'HW HL' THEN COUNT(*) else 0 END 'HW HL',
case when HomeTeamSequence = 'HW AW' THEN COUNT(*) else 0 END 'HW AW',
case when HomeTeamSequence = 'HW AD' THEN COUNT(*) else 0 END 'HW AD',
case when HomeTeamSequence = 'HW AL' THEN COUNT(*) else 0 END 'HW AL'
from fixture_list
WHERE ftr = 'H'
GROUP BY HomeTeamSequence
Я предполагаю, что мне нужна какая-то опорная точка.
Любая помощь приветствуется.