Comeback Kings
For each team, the longest consecutive run of league matches where they were losing at half-time but came back to win
Consecutive Comebacks
Bars are to scale · longest streak at top · hover for dates and opponents
Every Team's Longest Streak
| # | Team | Matches | Season(s) | First match | Last match | Opponents |
|---|---|---|---|---|---|---|
| 1 | Arsenal | 2 | 2001-02 | 26 Dec 2001 | 29 Dec 2001 | Chelsea, Middlesbrough |
| 2 | Aston Villa | 2 | 2024-25 | 14 Sep 2024 | 21 Sep 2024 | Everton, Wolverhampton Wanderers |
| 3 | Brighton and Hove Albion | 2 | 2024-25 | 19 May 2025 | 25 May 2025 | Liverpool, Tottenham Hotspur |
| 4 | Liverpool | 2 | 2008-09 | 05 Oct 2008 | 18 Oct 2008 | Manchester City, Wigan Athletic |
| 5 | Manchester United | 2 | 1993-94 | 30 Oct 1993 | 07 Nov 1993 | Queens Park Rangers, Manchester City |
| 6 | Newcastle United | 2 | 2001-02 | 15 Dec 2001 | 18 Dec 2001 | Blackburn Rovers, Arsenal |
| 7 | Norwich City | 2 | 1992-93 | 15 Aug 1992 | 19 Aug 1992 | Arsenal, Chelsea |
| 8 | Reading | 2 | 2012-13 | 12 Jan 2013 | 19 Jan 2013 | West Bromwich Albion, Newcastle United |
| 9 | Sheffield United | 2 | 1993-94 | 28 Mar 1994 | 02 Apr 1994 | West Ham United, Liverpool |
| 10 | Tottenham Hotspur | 2 | 2010-11 | 20 Nov 2010 | 28 Nov 2010 | Arsenal, Liverpool |
| 11 | Wolverhampton Wanderers | 2 | 2019-20 | 21 Dec 2019 | 27 Dec 2019 | Norwich City, Manchester City |
| 12 | Birmingham City | 1 | 2002-03 | 21 Apr 2003 | 21 Apr 2003 | Southampton |
| 13 | Blackburn Rovers | 1 | 1994-95 | 15 Oct 1994 | 15 Oct 1994 | Liverpool |
| 14 | Bolton Wanderers | 1 | 2004-05 | 15 May 2005 | 15 May 2005 | Everton |
| 15 | Bournemouth | 1 | 2016-17 | 04 Dec 2016 | 04 Dec 2016 | Liverpool |
| 16 | Brentford | 1 | 2021-22 | 10 Dec 2021 | 10 Dec 2021 | Watford |
| 17 | Burnley | 1 | 2009-10 | 09 May 2010 | 09 May 2010 | Tottenham Hotspur |
| 18 | Cardiff City | 1 | 2013-14 | 01 Feb 2014 | 01 Feb 2014 | Norwich City |
| 19 | Charlton Athletic | 1 | 1998-99 | 24 Oct 1998 | 24 Oct 1998 | West Ham United |
| 20 | Chelsea | 1 | 1993-94 | 07 May 1994 | 07 May 1994 | Sheffield United |
| 21 | Coventry City | 1 | 1993-94 | 18 Aug 1993 | 18 Aug 1993 | Newcastle United |
| 22 | Crystal Palace | 1 | 1992-93 | 12 Dec 1992 | 12 Dec 1992 | Queens Park Rangers |
| 23 | Derby County | 1 | 1996-97 | 01 Mar 1997 | 01 Mar 1997 | Chelsea |
| 24 | Everton | 1 | 1992-93 | 03 Mar 1993 | 03 Mar 1993 | Blackburn Rovers |
| 25 | Fulham | 1 | 2002-03 | 11 Sep 2002 | 11 Sep 2002 | Tottenham Hotspur |
| 26 | Hull City | 1 | 2009-10 | 08 Nov 2009 | 08 Nov 2009 | Stoke City |
| 27 | Ipswich Town | 1 | 1992-93 | 12 Dec 1992 | 12 Dec 1992 | Manchester City |
| 28 | Leeds United | 1 | 1992-93 | 09 Jan 1993 | 09 Jan 1993 | Southampton |
| 29 | Leicester City | 1 | 1999-00 | 03 Oct 1999 | 03 Oct 1999 | Tottenham Hotspur |
| 30 | Manchester City | 1 | 1992-93 | 21 Nov 1992 | 21 Nov 1992 | Coventry City |
| 31 | Middlesbrough | 1 | 1992-93 | 05 Dec 1992 | 05 Dec 1992 | Blackburn Rovers |
| 32 | Nottingham Forest | 1 | 1996-97 | 19 Jan 1997 | 19 Jan 1997 | Tottenham Hotspur |
| 33 | Portsmouth | 1 | 2004-05 | 04 Dec 2004 | 04 Dec 2004 | West Bromwich Albion |
| 34 | Queens Park Rangers | 1 | 1992-93 | 19 Aug 1992 | 19 Aug 1992 | Southampton |
| 35 | Sheffield Wednesday | 1 | 1996-97 | 22 Feb 1997 | 22 Feb 1997 | Southampton |
| 36 | Southampton | 1 | 1992-93 | 13 Mar 1993 | 13 Mar 1993 | Ipswich Town |
| 37 | Stoke City | 1 | 2009-10 | 20 Feb 2010 | 20 Feb 2010 | Portsmouth |
| 38 | Sunderland | 1 | 1999-00 | 25 Aug 1999 | 25 Aug 1999 | Newcastle United |
| 39 | Swansea City | 1 | 2012-13 | 07 May 2013 | 07 May 2013 | Wigan Athletic |
| 40 | Watford | 1 | 2017-18 | 14 Oct 2017 | 14 Oct 2017 | Arsenal |
| 41 | West Bromwich Albion | 1 | 2010-11 | 18 Sep 2010 | 18 Sep 2010 | Birmingham City |
| 42 | West Ham United | 1 | 1995-96 | 16 Dec 1995 | 16 Dec 1995 | Southampton |
| 43 | Wigan Athletic | 1 | 2009-10 | 18 Apr 2010 | 18 Apr 2010 | Arsenal |
| 44 | Wimbledon | 1 | 1993-94 | 29 Mar 1994 | 29 Mar 1994 | Blackburn Rovers |
SQL Query Used
-- Longest consecutive run of matches where each team was losing at half-time but came back to win
copy (
with team_games as (
select
match_id,
season_label,
kickoff_at,
home_team_abbr as team_abbr,
home_team_name as team_name,
away_team_abbr as opponent_abbr,
away_team_name as opponent_name,
home_half_time_score as ht_goals_for,
away_half_time_score as ht_goals_against,
result = 'home_win' as is_win
from "premier_league"."main"."fct_matches"
union all
select
match_id,
season_label,
kickoff_at,
away_team_abbr as team_abbr,
away_team_name as team_name,
home_team_abbr as opponent_abbr,
home_team_name as opponent_name,
away_half_time_score as ht_goals_for,
home_half_time_score as ht_goals_against,
result = 'away_win' as is_win
from "premier_league"."main"."fct_matches"
),
games_ranked as (
select
*,
row_number() over (
partition by team_abbr
order by kickoff_at, match_id
) as rn
from team_games
),
flagged as (
select
*,
rn - row_number() over (
partition by team_abbr
order by kickoff_at, match_id
) as grp
from games_ranked
where ht_goals_for < ht_goals_against and is_win
),
runs as (
select
team_abbr,
min(team_name) as team_name,
min(season_label) as start_season,
max(season_label) as end_season,
count(*) as run_length,
min(kickoff_at) as start_at,
max(kickoff_at) as end_at,
grp
from flagged
group by team_abbr, grp
),
ranked_runs as (
select
*,
row_number() over (
partition by team_abbr
order by run_length desc, start_at, team_name
) as rn
from runs
),
final as (
select * from ranked_runs where rn = 1
)
select
f.team_name,
f.team_abbr,
f.run_length,
case
when f.start_season = f.end_season then f.start_season
else f.start_season || ' → ' || f.end_season
end as seasons,
date(f.start_at) as start_date,
date(f.end_at) as end_date,
(
select string_agg(w.opponent_name, ', ' order by w.kickoff_at, w.match_id)
from flagged w
where w.team_abbr = f.team_abbr and w.grp = f.grp
) as opponents
from final f
order by f.run_length desc, f.team_name
)
to 'assets/data/comeback_kings.csv' (header, delimiter ',')