Player Streak Stats Finder - Pro Basketball
Current Search
Longest streak of consecutive games, in 2025-26, in the NBA/BAA, in the regular season, requiring Points >= 30, sorted by most games matching criteria.
THIS QUESTION WAS ANSWERED USING
POWERED BY
Your All Access Pass to the
Pro Basketball
Database
Go beyond the basics. Become a Stathead
Start Your FREE Trial
Display Query »
--------------------------------------
main
Page Setup Time: 0.00280 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=?
GROUP BY person_id
),
Gamelog AS (
SELECT person_id, year_id, team_id, (pts>=30) as met_criteria, LAG(pts>=30) OVER w AS lag_met_criteria, LEAD(pts>=30) 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)
WHERE comp_id IN('NBA','BAA')
AND year_id<=?
AND type=?
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, COUNT(*) AS games, SUM(is_starter) as is_starter_csk, SUM(is_starter IS NULL) as is_starter_incomplete, SUM(is_starter) AS is_starter, SUM(mp IS NULL) as mp_incomplete, SUM(mp) AS mp, SUM(fg IS NULL) as fg_incomplete, SUM(fg) AS fg, SUM(fga IS NULL) as fga_incomplete, SUM(fga) AS fga, IF(SUM(fga), SUM((fga IS NOT NULL) * fg) / SUM(fga), NULL) as fg_pct_csk, SUM(fga IS NULL)+SUM(fg IS NULL) as fg_pct_incomplete, TRIM(LEADING '0' FROM ROUND(IF(SUM(fga), SUM((fga IS NOT NULL) * fg) / SUM(fga), NULL),3)) AS fg_pct, NULL as fg2_incomplete, SUM(fg - IFNULL(fg3, 0)) AS fg2, NULL as fg2a_incomplete, SUM(fga - IFNULL(fg3a, 0)) AS fg2a, IF(SUM(fga - IFNULL(fg3a, 0)), SUM(((fga - IFNULL(fg3a, 0)) IS NOT NULL) * (fg - IFNULL(fg3, 0))) / SUM(fga - IFNULL(fg3a, 0)), NULL) as fg2_pct_csk, NULL as fg2_pct_incomplete, TRIM(LEADING '0' FROM ROUND(IF(SUM(fga - IFNULL(fg3a, 0)), SUM(((fga - IFNULL(fg3a, 0)) IS NOT NULL) * (fg - IFNULL(fg3, 0))) / SUM(fga - IFNULL(fg3a, 0)), NULL),3)) AS fg2_pct, NULL as fg3_incomplete, SUM(fg3) AS fg3, NULL as fg3a_incomplete, SUM(fg3a) AS fg3a, IF(SUM(fg3a), SUM((fg3a IS NOT NULL) * fg3) / SUM(fg3a), NULL) as fg3_pct_csk, NULL as fg3_pct_incomplete, TRIM(LEADING '0' FROM ROUND(IF(SUM(fg3a), SUM((fg3a IS NOT NULL) * fg3) / SUM(fg3a), NULL),3)) AS fg3_pct, SUM(ft IS NULL) as ft_incomplete, SUM(ft) AS ft, SUM(fta IS NULL) as fta_incomplete, SUM(fta) AS fta, IF(SUM(fta), SUM(ft) / SUM(fta), NULL) as ft_pct_csk, SUM(fta IS NULL)+SUM(ft IS NULL) as ft_pct_incomplete, TRIM(LEADING '0' FROM ROUND(IF(SUM(fta), SUM(ft) / SUM(fta), NULL),3)) AS ft_pct, IF(SUM(fga + fta), SUM((fga IS NOT NULL AND fta IS NOT NULL) * pts) / SUM(2 * (fga + (0.44 * fta))), NULL) as ts_pct_csk, SUM(fga IS NULL)+SUM(pts IS NULL)+SUM(fta IS NULL) as ts_pct_incomplete, TRIM(LEADING '0' FROM ROUND(IF(SUM(fga + fta), SUM((fga IS NOT NULL AND fta IS NOT NULL) * pts) / SUM(2 * (fga + (0.44 * fta))), NULL),3)) AS ts_pct, SUM(orb IS NULL) as orb_incomplete, SUM(orb) AS orb, SUM(orb IS NULL)+SUM(trb IS NULL) as drb_incomplete, SUM(trb - orb) AS drb, SUM(trb IS NULL) as trb_incomplete, SUM(trb) AS trb, SUM(ast IS NULL) as ast_incomplete, SUM(ast) AS ast, SUM(stl IS NULL) as stl_incomplete, SUM(stl) AS stl, SUM(blk IS NULL) as blk_incomplete, SUM(blk) AS blk, SUM(((pts>=10)+(trb IS NOT NULL AND trb>=10)+(blk IS NOT NULL AND blk>=10)+(stl IS NOT NULL AND stl>=10)+(ast IS NOT NULL AND ast>=10))>=3) AS tpl_dbl, SUM(((pts>=10)+(trb IS NOT NULL AND trb>=10)+(blk IS NOT NULL AND blk>=10)+(stl IS NOT NULL AND stl>=10)+(ast IS NOT NULL AND ast>=10))>=2) AS dbl_dbl, SUM(tov IS NULL) as tov_incomplete, SUM(tov) AS tov, SUM(pf IS NULL) as pf_incomplete, SUM(pf) AS pf, SUM(pts IS NULL) as pts_incomplete, SUM(pts) AS pts, SUM(pts + 0.4 * fg - 0.7 * fga - 0.4 * (fta - ft) + 0.7 * orb + 0.3 * (trb - orb) + stl + 0.7 * ast + 0.7 * blk - 0.4 * pf - tov) / COUNT(*) as game_score_csk, SUM(ast IS NULL)+SUM(pf IS NULL)+SUM(ft IS NULL)+SUM(blk IS NULL)+SUM(orb IS NULL)+SUM(fga IS NULL)+SUM(tov IS NULL)+SUM(fta IS NULL)+SUM(stl IS NULL)+SUM(fg IS NULL)+SUM(trb IS NULL)+SUM(pts IS NULL) as game_score_incomplete, ROUND(SUM(pts + 0.4 * fg - 0.7 * fga - 0.4 * (fta - ft) + 0.7 * orb + 0.3 * (trb - orb) + stl + 0.7 * ast + 0.7 * blk - 0.4 * pf - tov) / COUNT(*),1) AS game_score, SUM(plus_minus IS NULL) as plus_minus_incomplete, SUM(plus_minus) AS plus_minus, SUM(bpm * time_on_court) / SUM(time_on_court) as bpm_csk, SUM(bpm IS NULL)+SUM(time_on_court IS NULL) as bpm_incomplete, ROUND(SUM(bpm * time_on_court) / SUM(time_on_court),1) AS bpm
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 IN('NBA','BAA')
AND type=?
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 = [
'reg',
2026,
'reg',
2026,
2,
'reg'
];
Query Time: 0.30 seconds
Table Build Time: 0.06 seconds
--------------------------------------
SH->PARAM -- $VAR1 = {
'season_start' => 1,
'match' => 'player_streak_game',
'comp_id' => 'NBA',
'timeframe' => 'seasons',
'team_game_max' => 99,
'year_max' => 2026,
'streak_length' => 2,
'team_game_min' => 1,
'season_end' => -1,
'order_by' => 'streak_length',
'order_by_asc' => '0',
'comp_type' => 'reg',
'year_min' => 2026
};
SH->PARAM_NO_DEFAULT -- $VAR1 = {
'order_by' => 'streak_length',
'order_by_asc' => '0',
'year_max' => 2026,
'year_min' => 2026,
'comp_id' => 'NBA'
};
--------------------------------------
main
Page Setup Time: 0.00280 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=?
GROUP BY person_id
),
Gamelog AS (
SELECT person_id, year_id, team_id, (pts>=30) as met_criteria, LAG(pts>=30) OVER w AS lag_met_criteria, LEAD(pts>=30) 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)
WHERE comp_id IN('NBA','BAA')
AND year_id<=?
AND type=?
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, COUNT(*) AS games, SUM(is_starter) as is_starter_csk, SUM(is_starter IS NULL) as is_starter_incomplete, SUM(is_starter) AS is_starter, SUM(mp IS NULL) as mp_incomplete, SUM(mp) AS mp, SUM(fg IS NULL) as fg_incomplete, SUM(fg) AS fg, SUM(fga IS NULL) as fga_incomplete, SUM(fga) AS fga, IF(SUM(fga), SUM((fga IS NOT NULL) * fg) / SUM(fga), NULL) as fg_pct_csk, SUM(fga IS NULL)+SUM(fg IS NULL) as fg_pct_incomplete, TRIM(LEADING '0' FROM ROUND(IF(SUM(fga), SUM((fga IS NOT NULL) * fg) / SUM(fga), NULL),3)) AS fg_pct, NULL as fg2_incomplete, SUM(fg - IFNULL(fg3, 0)) AS fg2, NULL as fg2a_incomplete, SUM(fga - IFNULL(fg3a, 0)) AS fg2a, IF(SUM(fga - IFNULL(fg3a, 0)), SUM(((fga - IFNULL(fg3a, 0)) IS NOT NULL) * (fg - IFNULL(fg3, 0))) / SUM(fga - IFNULL(fg3a, 0)), NULL) as fg2_pct_csk, NULL as fg2_pct_incomplete, TRIM(LEADING '0' FROM ROUND(IF(SUM(fga - IFNULL(fg3a, 0)), SUM(((fga - IFNULL(fg3a, 0)) IS NOT NULL) * (fg - IFNULL(fg3, 0))) / SUM(fga - IFNULL(fg3a, 0)), NULL),3)) AS fg2_pct, NULL as fg3_incomplete, SUM(fg3) AS fg3, NULL as fg3a_incomplete, SUM(fg3a) AS fg3a, IF(SUM(fg3a), SUM((fg3a IS NOT NULL) * fg3) / SUM(fg3a), NULL) as fg3_pct_csk, NULL as fg3_pct_incomplete, TRIM(LEADING '0' FROM ROUND(IF(SUM(fg3a), SUM((fg3a IS NOT NULL) * fg3) / SUM(fg3a), NULL),3)) AS fg3_pct, SUM(ft IS NULL) as ft_incomplete, SUM(ft) AS ft, SUM(fta IS NULL) as fta_incomplete, SUM(fta) AS fta, IF(SUM(fta), SUM(ft) / SUM(fta), NULL) as ft_pct_csk, SUM(fta IS NULL)+SUM(ft IS NULL) as ft_pct_incomplete, TRIM(LEADING '0' FROM ROUND(IF(SUM(fta), SUM(ft) / SUM(fta), NULL),3)) AS ft_pct, IF(SUM(fga + fta), SUM((fga IS NOT NULL AND fta IS NOT NULL) * pts) / SUM(2 * (fga + (0.44 * fta))), NULL) as ts_pct_csk, SUM(fga IS NULL)+SUM(pts IS NULL)+SUM(fta IS NULL) as ts_pct_incomplete, TRIM(LEADING '0' FROM ROUND(IF(SUM(fga + fta), SUM((fga IS NOT NULL AND fta IS NOT NULL) * pts) / SUM(2 * (fga + (0.44 * fta))), NULL),3)) AS ts_pct, SUM(orb IS NULL) as orb_incomplete, SUM(orb) AS orb, SUM(orb IS NULL)+SUM(trb IS NULL) as drb_incomplete, SUM(trb - orb) AS drb, SUM(trb IS NULL) as trb_incomplete, SUM(trb) AS trb, SUM(ast IS NULL) as ast_incomplete, SUM(ast) AS ast, SUM(stl IS NULL) as stl_incomplete, SUM(stl) AS stl, SUM(blk IS NULL) as blk_incomplete, SUM(blk) AS blk, SUM(((pts>=10)+(trb IS NOT NULL AND trb>=10)+(blk IS NOT NULL AND blk>=10)+(stl IS NOT NULL AND stl>=10)+(ast IS NOT NULL AND ast>=10))>=3) AS tpl_dbl, SUM(((pts>=10)+(trb IS NOT NULL AND trb>=10)+(blk IS NOT NULL AND blk>=10)+(stl IS NOT NULL AND stl>=10)+(ast IS NOT NULL AND ast>=10))>=2) AS dbl_dbl, SUM(tov IS NULL) as tov_incomplete, SUM(tov) AS tov, SUM(pf IS NULL) as pf_incomplete, SUM(pf) AS pf, SUM(pts IS NULL) as pts_incomplete, SUM(pts) AS pts, SUM(pts + 0.4 * fg - 0.7 * fga - 0.4 * (fta - ft) + 0.7 * orb + 0.3 * (trb - orb) + stl + 0.7 * ast + 0.7 * blk - 0.4 * pf - tov) / COUNT(*) as game_score_csk, SUM(ast IS NULL)+SUM(pf IS NULL)+SUM(ft IS NULL)+SUM(blk IS NULL)+SUM(orb IS NULL)+SUM(fga IS NULL)+SUM(tov IS NULL)+SUM(fta IS NULL)+SUM(stl IS NULL)+SUM(fg IS NULL)+SUM(trb IS NULL)+SUM(pts IS NULL) as game_score_incomplete, ROUND(SUM(pts + 0.4 * fg - 0.7 * fga - 0.4 * (fta - ft) + 0.7 * orb + 0.3 * (trb - orb) + stl + 0.7 * ast + 0.7 * blk - 0.4 * pf - tov) / COUNT(*),1) AS game_score, SUM(plus_minus IS NULL) as plus_minus_incomplete, SUM(plus_minus) AS plus_minus, SUM(bpm * time_on_court) / SUM(time_on_court) as bpm_csk, SUM(bpm IS NULL)+SUM(time_on_court IS NULL) as bpm_incomplete, ROUND(SUM(bpm * time_on_court) / SUM(time_on_court),1) AS bpm
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 IN('NBA','BAA')
AND type=?
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 = [
'reg',
2026,
'reg',
2026,
2,
'reg'
];
Query Time: 0.30 seconds
Table Build Time: 0.06 seconds
--------------------------------------
SH->PARAM -- $VAR1 = {
'season_start' => 1,
'match' => 'player_streak_game',
'comp_id' => 'NBA',
'timeframe' => 'seasons',
'team_game_max' => 99,
'year_max' => 2026,
'streak_length' => 2,
'team_game_min' => 1,
'season_end' => -1,
'order_by' => 'streak_length',
'order_by_asc' => '0',
'comp_type' => 'reg',
'year_min' => 2026
};
SH->PARAM_NO_DEFAULT -- $VAR1 = {
'order_by' => 'streak_length',
'order_by_asc' => '0',
'year_max' => 2026,
'year_min' => 2026,
'comp_id' => 'NBA'
};
Data coverage: since 1946-47 unless otherwise noted. Regular season: PTS, FG, FT, 3P complete all-time. FTA complete back to 1948-49. FGA, TRB, AST, PF, GS over 99% complete back to 1975-76. MP over 99% complete back to 1976-77. +/- complete back to 1996-97. All other box score stats (3PA, ORB, DRB, STL, BLK, TOV) complete back to 1983-84. Playoffs: PTS, FG, FT, FTA, 3P, 3PA complete all-time. PF complete back to 1948-49. FGA, TRB, AST complete back to 1962-63. GS complete back to 1973-74. MP complete back to 1974-75. +/- complete back to 1996-97. STL, BLK, TOV complete back to 1982-83. ORB, DRB complete back to 1983-84. BPM not available for WNBA & ABA. 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.