Player Streak Stats Finder - Pro Football
Current Search
Longest streak of consecutive games, in 2025, played in the NFL, in the regular season, requiring Rushing Yds >= 100, sorted by most games matching criteria.
THIS QUESTION WAS ANSWERED USING
POWERED BY
Your All Access Pass to the
Pro Football
Database
Go beyond the basics. Become a Stathead
Start Your FREE Trial
Display Query »
--------------------------------------
main
Page Setup Time: 0.00194 seconds
WITH
Meta AS (
SELECT MAX(year_id) as MaxYear, person_id
FROM sup_player_team_seasons
JOIN sup_phase_seasons USING (comp_id, phase_id, year_id)
WHERE type="reg"
GROUP BY person_id
),
Gamelog AS (
SELECT person_id, year_id, team_id, (rush_yds>=100) as met_criteria, LAG(rush_yds>=100) OVER w AS lag_met_criteria, LEAD(rush_yds>=100) OVER w AS lead_met_criteria, ROW_NUMBER() OVER w AS rn, date, player_game_num_career, phase_id
FROM sup_player_games
JOIN sup_games USING (game_id)
JOIN (SELECT game_id, year_id, comp_id, phase_id, team_id, opp_team_id, opp_comp_id, opp_phase_id, team_game_num_season, team_game_num_franchise, home_away_neutral, win, loss, tie FROM sup_team_games) as tg USING (game_id, team_id)
JOIN sup_phase_seasons USING (comp_id, phase_id, year_id)
JOIN sup_comp_seasons USING (comp_id, year_id)
WHERE comp_id=?
AND type="reg"
AND year_id>=?
AND (forfeit IS NULL OR (forfeit != 'V' AND forfeit != 'H'))
WINDOW w AS (PARTITION BY person_id ORDER BY date )
),
StreakStart AS (
SELECT ROW_NUMBER() OVER w1 AS rownum, Gamelog.rn as rn_start, date AS streak_start_date, person_id, player_game_num_career AS gn_start
FROM Gamelog
WHERE met_criteria = 1
AND (lag_met_criteria = 0 OR lag_met_criteria IS NULL)
WINDOW w1 AS (PARTITION BY person_id ORDER BY date )
),
StreakEnd AS (
SELECT ROW_NUMBER() OVER w2 AS rownum, Gamelog.rn as rn_end, date AS streak_end_date, IF(lead_met_criteria IS NULL AND year_id=MaxYear,1,0) AS active_streak, person_id, player_game_num_career AS gn_end
FROM Gamelog
JOIN Meta USING (person_id)
WHERE met_criteria = 1
AND (lead_met_criteria = 0 OR lead_met_criteria IS NULL)
WINDOW w2 AS (PARTITION BY person_id ORDER BY date )
),
streak_list AS (
SELECT person_id, streak_start_date, streak_end_date, (rn_end - rn_start)+1 as streak_length, active_streak
FROM StreakStart
JOIN StreakEnd USING (person_id, rownum)
WHERE 1
HAVING streak_length>=?
ORDER BY streak_length DESC, streak_end_date DESC LIMIT 0, 20
)
SELECT name_display, name_display_csk, sup_players.link as name_display_link, IF(MIN(age_in_season)=MAX(age_in_season), MIN(age_in_season), CONCAT(MIN(age_in_season), '-', MAX(age_in_season))) as age_range, person_id, streak_length, streak_start_date as streak_start_date_csk, streak_start_date as streak_start_date, streak_end_date as streak_end_date_csk, streak_end_date as streak_end_date, active_streak as active_streak_csk, IF(active_streak=1,'*','') as active_streak, GROUP_CONCAT(DISTINCT UPPER(ts.name_abbr)) as teams_played_for_career, 'Games List' as details_games, SUM(rush_att IS NULL) as rush_att_incomplete, SUM(rush_att) AS rush_att, SUM(rush_yds IS NULL) as rush_yds_incomplete, SUM(rush_yds) AS rush_yds, IF(SUM(rush_att), SUM(rush_yds)/SUM(rush_att), NULL) as rush_yds_per_att_csk, SUM(rush_yds IS NULL)+SUM(rush_att IS NULL) as rush_yds_per_att_incomplete, ROUND(IF(SUM(rush_att), SUM(rush_yds)/SUM(rush_att), NULL),1) AS rush_yds_per_att, SUM(rush_td IS NULL) as rush_td_incomplete, SUM(rush_td) AS rush_td, SUM(rush_first_down IS NULL) as rush_first_down_incomplete, SUM(rush_first_down) AS rush_first_down
FROM streak_list
JOIN sup_player_games as st USING (person_id)
JOIN sup_games USING (game_id)
JOIN sup_people USING (person_id)
JOIN sup_players USING (person_id)
JOIN (SELECT game_id, year_id, comp_id, phase_id, team_id, opp_team_id, opp_comp_id, opp_phase_id, team_game_num_season, home_away_neutral, win, loss, tie FROM sup_team_games) as tg USING (game_id, team_id)
JOIN (SELECT person_id, year_id, age as age_in_season FROM sup_player_team_seasons GROUP BY person_id, year_id ) as ps2 USING (person_id, year_id)
JOIN sup_phase_seasons USING (comp_id, phase_id, year_id)
JOIN sup_comp_seasons USING (comp_id, year_id)
JOIN (SELECT team_id, year_id, name_abbr, name, link FROM sup_team_seasons GROUP BY team_id, year_id ) as ts USING (team_id, year_id)
WHERE comp_id=?
AND type="reg"
AND date>=streak_start_date
AND date<=streak_end_date
GROUP BY person_id, streak_start_date, streak_end_date
ORDER BY streak_length DESC, streak_end_date_csk DESC, person_id
SQL PARAMS -- $VAR1 = [
'NFL',
2025,
2,
'NFL'
];
Query Time: 1.04 seconds
Table Build Time: 0.03 seconds
--------------------------------------
SH->PARAM -- $VAR1 = {
'qb_start_num_career_min' => 1,
'year_max' => 2025,
'season_start' => 1,
'rookie' => 'N',
'order_by_asc' => '0',
'timeframe' => 'seasons',
'comp_id' => 'NFL',
'week_num_season_min' => 1,
'streak_length' => 2,
'match' => 'player_streak_game',
'season_end' => -1,
'team_game_num_season_min' => 1,
'comp_type' => 'reg',
'week_num_season_max' => 22,
'qb_start_num_career_max' => 400,
'order_by' => 'streak_length',
'year_min' => 2025,
'weight_max' => '500',
'team_game_num_season_max' => 17
};
SH->PARAM_NO_DEFAULT -- $VAR1 = {
'year_min' => 2025,
'order_by' => 'streak_length',
'year_max' => 2025,
'order_by_asc' => '0',
'comp_id' => 'NFL'
};
--------------------------------------
main
Page Setup Time: 0.00194 seconds
WITH
Meta AS (
SELECT MAX(year_id) as MaxYear, person_id
FROM sup_player_team_seasons
JOIN sup_phase_seasons USING (comp_id, phase_id, year_id)
WHERE type="reg"
GROUP BY person_id
),
Gamelog AS (
SELECT person_id, year_id, team_id, (rush_yds>=100) as met_criteria, LAG(rush_yds>=100) OVER w AS lag_met_criteria, LEAD(rush_yds>=100) OVER w AS lead_met_criteria, ROW_NUMBER() OVER w AS rn, date, player_game_num_career, phase_id
FROM sup_player_games
JOIN sup_games USING (game_id)
JOIN (SELECT game_id, year_id, comp_id, phase_id, team_id, opp_team_id, opp_comp_id, opp_phase_id, team_game_num_season, team_game_num_franchise, home_away_neutral, win, loss, tie FROM sup_team_games) as tg USING (game_id, team_id)
JOIN sup_phase_seasons USING (comp_id, phase_id, year_id)
JOIN sup_comp_seasons USING (comp_id, year_id)
WHERE comp_id=?
AND type="reg"
AND year_id>=?
AND (forfeit IS NULL OR (forfeit != 'V' AND forfeit != 'H'))
WINDOW w AS (PARTITION BY person_id ORDER BY date )
),
StreakStart AS (
SELECT ROW_NUMBER() OVER w1 AS rownum, Gamelog.rn as rn_start, date AS streak_start_date, person_id, player_game_num_career AS gn_start
FROM Gamelog
WHERE met_criteria = 1
AND (lag_met_criteria = 0 OR lag_met_criteria IS NULL)
WINDOW w1 AS (PARTITION BY person_id ORDER BY date )
),
StreakEnd AS (
SELECT ROW_NUMBER() OVER w2 AS rownum, Gamelog.rn as rn_end, date AS streak_end_date, IF(lead_met_criteria IS NULL AND year_id=MaxYear,1,0) AS active_streak, person_id, player_game_num_career AS gn_end
FROM Gamelog
JOIN Meta USING (person_id)
WHERE met_criteria = 1
AND (lead_met_criteria = 0 OR lead_met_criteria IS NULL)
WINDOW w2 AS (PARTITION BY person_id ORDER BY date )
),
streak_list AS (
SELECT person_id, streak_start_date, streak_end_date, (rn_end - rn_start)+1 as streak_length, active_streak
FROM StreakStart
JOIN StreakEnd USING (person_id, rownum)
WHERE 1
HAVING streak_length>=?
ORDER BY streak_length DESC, streak_end_date DESC LIMIT 0, 20
)
SELECT name_display, name_display_csk, sup_players.link as name_display_link, IF(MIN(age_in_season)=MAX(age_in_season), MIN(age_in_season), CONCAT(MIN(age_in_season), '-', MAX(age_in_season))) as age_range, person_id, streak_length, streak_start_date as streak_start_date_csk, streak_start_date as streak_start_date, streak_end_date as streak_end_date_csk, streak_end_date as streak_end_date, active_streak as active_streak_csk, IF(active_streak=1,'*','') as active_streak, GROUP_CONCAT(DISTINCT UPPER(ts.name_abbr)) as teams_played_for_career, 'Games List' as details_games, SUM(rush_att IS NULL) as rush_att_incomplete, SUM(rush_att) AS rush_att, SUM(rush_yds IS NULL) as rush_yds_incomplete, SUM(rush_yds) AS rush_yds, IF(SUM(rush_att), SUM(rush_yds)/SUM(rush_att), NULL) as rush_yds_per_att_csk, SUM(rush_yds IS NULL)+SUM(rush_att IS NULL) as rush_yds_per_att_incomplete, ROUND(IF(SUM(rush_att), SUM(rush_yds)/SUM(rush_att), NULL),1) AS rush_yds_per_att, SUM(rush_td IS NULL) as rush_td_incomplete, SUM(rush_td) AS rush_td, SUM(rush_first_down IS NULL) as rush_first_down_incomplete, SUM(rush_first_down) AS rush_first_down
FROM streak_list
JOIN sup_player_games as st USING (person_id)
JOIN sup_games USING (game_id)
JOIN sup_people USING (person_id)
JOIN sup_players USING (person_id)
JOIN (SELECT game_id, year_id, comp_id, phase_id, team_id, opp_team_id, opp_comp_id, opp_phase_id, team_game_num_season, home_away_neutral, win, loss, tie FROM sup_team_games) as tg USING (game_id, team_id)
JOIN (SELECT person_id, year_id, age as age_in_season FROM sup_player_team_seasons GROUP BY person_id, year_id ) as ps2 USING (person_id, year_id)
JOIN sup_phase_seasons USING (comp_id, phase_id, year_id)
JOIN sup_comp_seasons USING (comp_id, year_id)
JOIN (SELECT team_id, year_id, name_abbr, name, link FROM sup_team_seasons GROUP BY team_id, year_id ) as ts USING (team_id, year_id)
WHERE comp_id=?
AND type="reg"
AND date>=streak_start_date
AND date<=streak_end_date
GROUP BY person_id, streak_start_date, streak_end_date
ORDER BY streak_length DESC, streak_end_date_csk DESC, person_id
SQL PARAMS -- $VAR1 = [
'NFL',
2025,
2,
'NFL'
];
Query Time: 1.04 seconds
Table Build Time: 0.03 seconds
--------------------------------------
SH->PARAM -- $VAR1 = {
'qb_start_num_career_min' => 1,
'year_max' => 2025,
'season_start' => 1,
'rookie' => 'N',
'order_by_asc' => '0',
'timeframe' => 'seasons',
'comp_id' => 'NFL',
'week_num_season_min' => 1,
'streak_length' => 2,
'match' => 'player_streak_game',
'season_end' => -1,
'team_game_num_season_min' => 1,
'comp_type' => 'reg',
'week_num_season_max' => 22,
'qb_start_num_career_max' => 400,
'order_by' => 'streak_length',
'year_min' => 2025,
'weight_max' => '500',
'team_game_num_season_max' => 17
};
SH->PARAM_NO_DEFAULT -- $VAR1 = {
'year_min' => 2025,
'order_by' => 'streak_length',
'year_max' => 2025,
'order_by_asc' => '0',
'comp_id' => 'NFL'
};
Data coverage: since 1970. Scoring statistics (TD, XP, FG) are complete. Yardage and attempts statistics are nearly complete. Please see our data coverage page for details.

We're Social...for Statheads
Site Last Updated:
Question, Comment, Feedback, or Correction?
Subscribe to our Free Email Newsletter
Do you have a sports website? Or write about sports? We have tools and resources that can help you use sports data. Find out more.