Longest Gap Between Wins
For each team, the longest time between two consecutive wins — spanning seasons, not games
Time Between Wins
Bars are to scale · longest gap at top · hover for dates
Every Team's Longest Gap
#TeamGapLast winNext winDaysLeague matches between
1Nottingham Forest23 years and 90 days16 May 199914 Aug 20228,4911
2Ipswich Town22 years and 200 days24 Apr 200210 Nov 20248,23612
3Leeds United16 years and 162 days10 Apr 200419 Sep 20206,0067
4Queens Park Rangers15 years and 115 days27 Apr 199620 Aug 20115,5932
5Sheffield United12 years and 153 days30 Apr 199430 Sep 20064,5368
6Leicester City10 years and 128 days08 May 200413 Sep 20143,7804
7Norwich City9 years and 245 days20 Mar 199520 Nov 20043,53321
8Crystal Palace8 years and 130 days23 Apr 200531 Aug 20133,0525
9Watford8 years and 130 days05 May 200712 Sep 20153,0525
10Sunderland8 years and 102 days06 May 201716 Aug 20253,0243
11Southampton7 years and 145 days30 Apr 200522 Sep 20122,7026
12Middlesbrough7 years and 132 days11 Apr 200921 Aug 20162,6897
13Wolverhampton Wanderers6 years and 209 days04 Feb 201201 Sep 20182,40117
14Derby County5 years and 185 days16 Mar 200217 Sep 20072,01113
15Cardiff City4 years and 191 days12 Apr 201420 Oct 20181,65212
16Reading4 years and 190 days11 May 200817 Nov 20121,65110
17Burnley4 years and 183 days09 May 201008 Nov 20141,64410
18Fulham4 years and 136 days12 Apr 201426 Aug 20181,5976
19Manchester City4 years and 118 days27 Apr 199623 Aug 20001,5792
20Aston Villa3 years and 198 days06 Feb 201623 Aug 20191,29415
21Hull City3 years and 150 days27 Mar 201024 Aug 20131,2468
22Bolton Wanderers3 years and 108 days02 May 199818 Aug 20011,2041
23West Bromwich Albion2 years and 222 days04 Feb 200613 Sep 200895216
24Blackburn Rovers2 years and 158 days20 Mar 199925 Aug 200188910
25West Ham United2 years and 102 days03 May 200313 Aug 20058331
26Bournemouth2 years and 11 days26 Jul 202006 Aug 20227410
27Birmingham City1 year and 128 days19 Apr 200625 Aug 20074936
28Charlton Athletic1 year and 103 days08 May 199919 Aug 20004691
29Newcastle United1 year and 103 days15 May 201626 Aug 20174682
30Huddersfield Town205 days14 Apr 201805 Nov 201820514
31Everton178 days07 May 199401 Nov 199417812
32Tottenham Hotspur176 days03 May 200826 Oct 20081769
33Brighton and Hove Albion175 days28 Dec 201920 Jun 20201759
34Stoke City175 days07 Apr 201229 Sep 201217511
35Wimbledon157 days03 Mar 199907 Aug 199915711
36Liverpool144 days08 May 201229 Sep 20121446
37Portsmouth144 days08 Apr 200830 Aug 20081447
38Coventry City140 days27 Apr 199614 Sep 19961406
39Sheffield Wednesday139 days16 May 199902 Oct 19991399
40Arsenal133 days07 May 200617 Sep 20061333
41Wigan Athletic132 days18 Apr 201028 Aug 20101325
42Manchester United131 days06 May 201414 Sep 20141314
43Chelsea130 days13 Apr 199621 Aug 19961304
44Swansea City117 days07 May 201301 Sep 20131174
45Brentford105 days10 May 202523 Aug 20251053
46Bradford City102 days01 Jan 200113 Apr 200110210
47Oldham Athletic102 days08 May 199318 Aug 19931021
48Swindon Town84 days05 Feb 199430 Apr 19948412
49Blackpool81 days22 Feb 201114 May 2011819
50Luton Town67 days30 Jan 202406 Apr 20246710
51Barnsley54 days27 Aug 199720 Oct 1997546
SQL Query Used
-- Longest calendar gap each team went between consecutive wins, across all seasons
copy (
    with team_games as (
        select
            match_id,
            kickoff_at,
            kickoff_date,
            home_team_id as team_id,
            home_team_name as team_name,
            home_team_abbr as team_abbr,
            result = 'home_win' as is_win
        from "premier_league"."main"."fct_matches"
        union all
        select
            match_id,
            kickoff_at,
            kickoff_date,
            away_team_id as team_id,
            away_team_name as team_name,
            away_team_abbr as team_abbr,
            result = 'away_win' as is_win
        from "premier_league"."main"."fct_matches"
    ),
    games_ranked as (
        select
            *,
            row_number() over (
                partition by team_id
                order by kickoff_at, match_id
            ) as game_rank
        from team_games
    ),
    wins as (
        select
            *,
            lag(game_rank) over (
                partition by team_id
                order by kickoff_at, match_id
            ) as prev_win_game_rank,
            lag(kickoff_date) over (
                partition by team_id
                order by kickoff_at, match_id
            ) as prev_win_date
        from games_ranked
        where is_win
    ),
    gaps as (
        select
            team_id,
            min(team_name) as team_name,
            min(team_abbr) as team_abbr,
            prev_win_date as start_date,
            kickoff_date as end_date,
            datediff('day', prev_win_date, kickoff_date) as gap_days,
            game_rank - prev_win_game_rank - 1 as matches_between
        from wins
        where prev_win_date is not null
        group by
            team_id,
            prev_win_date,
            kickoff_date,
            game_rank - prev_win_game_rank - 1
    ),
    ranked as (
        select
            *,
            row_number() over (
                partition by team_id
                order by gap_days desc, end_date desc
            ) as rn
        from gaps
    )
    select
        team_name,
        team_abbr,
        start_date,
        end_date,
        gap_days,
        matches_between
    from ranked
    where rn = 1
    order by gap_days desc, team_name
)
to 'assets/data/longest_winless_gaps.csv' (header, delimiter ',')