Yesterday I saw something I’ve never seen in a baseball game before: a runner getting hit by a batted ball, which according to Rule 7.08(f) means the runner is out and the ball is dead. It turns out that this isn’t as unusual an event as I’d thought (see below), but what was unusal is that this ended the game between the Angels and Giants. Even stranger, this is also how the game between the Diamondbacks and Dodgers ended.
Let’s use Retrosheet data to see how often this happens. Retrosheet data is organized into game data, roster data and event data. Event files contain a record of every event in a game and include the code BR for when a runner is hit by a batted ball. Here’s a SQL query to find all the matching events, who got hit and whether it was the last out in the game.
SELECT sub.game_id, teams, date, inn_ct, outs_ct, bat_team, event_tx, first_name || ' ' || last_name AS runner, CASE WHEN event_id = max_event_id THEN 'last out' ELSE '' END AS last_out FROM ( SELECT year, game_id, away_team_id || ' @ ' || home_team_id AS teams, date, inn_ct, CASE WHEN bat_home_id = 1 THEN home_team_id ELSE away_team_id END AS bat_team, outs_ct, event_tx, CASE regexp_replace(event_tx, '.*([1-3])X[1-3H].*', E'\\1') WHEN '1' THEN base1_run_id WHEN '2' THEN base2_run_id WHEN '3' THEN base3_run_id END AS runner_id, event_id FROM events WHERE event_tx ~ 'BR' ) AS sub INNER JOIN rosters ON sub.year=rosters.year AND runner_id=player_id AND rosters.team_id = bat_team INNER JOIN ( SELECT game_id, max(event_id) AS max_event_id FROM events GROUP BY game_id ) AS max_events ON sub.game_id = max_events.game_id ORDER BY date;
Here's what the query does. The first sub-query sub finds all the events with the BR code, determines which team was batting and finds the id for the player who was running. This is joined with the roster table so we can assign a name to the runner. Finally, it’s joined with a subquery, max_events, which finds the last event in each game. Once we’ve got all that, the SELECT statement at the very top retrieves the columns of interest, and records whether the event was the last out of the game.
Retrosheet has event data going back to 1922, but the event files don’t include every game played in a season until the mid-50s. Starting in 1955 a runner being hit by a batted ball has a game twelve times, most recently in 2010. On average, runners get hit (and are called out) about fourteen times a season.
Here are the twelve times a runner got hit to end the game, since 1955. Until yesterday, when it happened twice in one day:
|1956-09-30||NY1 @ PHI||PHI||S4/BR.1X2(4)#||Granny Hamner|
|1961-09-16||PHI @ CIN||PHI||S/BR/G4.1X2(4)||Clarence Coleman|
|1971-08-07||SDN @ HOU||SDN||S/BR.1X2(3)||Ed Spiezio|
|1979-04-07||CAL @ SEA||SEA||S/BR.1X2(4)||Larry Milbourne|
|1979-08-15||TOR @ OAK||TOR||S/BR.3-3;2X3(4)#||Alfredo Griffin|
|1980-09-22||CLE @ NYA||CLE||S/BR.3XH(5)||Toby Harrah|
|1984-04-06||MIL @ SEA||MIL||S/BR.1X2(4)||Robin Yount|
|1987-06-25||ATL @ LAN||ATL||S/L3/BR.1X2(3)||Glenn Hubbard|
|1994-06-13||HOU @ SFN||HOU||S/BR.1X2(4)||James Mouton|
|2001-08-04||NYN @ ARI||ARI||S/BR.2X3(6)||David Dellucci|
|2003-04-09||KCA @ DET||DET||S/BR.1X2(4)||Bobby Higginson|
|2010-06-27||PIT @ OAK||PIT||S/BR/G.1X2(3)||Pedro Alvarez|
And all runners hit last season:
|2014-05-07||SEA @ OAK||OAK||S/BR/G.1X2(3)||Derek Norris|
|2014-05-11||MIN @ DET||DET||S/BR/G.3-3;2X3(6);1-2||Austin Jackson|
|2014-05-23||CLE @ BAL||BAL||S/BR/G.2X3(6);1-2||Chris Davis|
|2014-05-27||NYA @ SLN||SLN||S/BR/G.1X2(3)||Matt Holliday|
|2014-06-14||CHN @ PHI||CHN||S/BR/G.1X2(4)||Justin Ruggiano|
|2014-07-13||OAK @ SEA||SEA||S/BR/G.1X2(4)||Kyle Seager|
|2014-07-18||PHI @ ATL||PHI||S/BR/G.1X2(4)||Grady Sizemore|
|2014-07-25||BAL @ SEA||SEA||S/BR/G.1X2(4)||Brad Miller|
|2014-08-05||NYN @ WAS||WAS||S/BR/G.2X3(6);3-3||Asdrubal Cabrera|
|2014-09-04||SLN @ MIL||SLN||S/BR/G.2X3(6);1-2||Matt Carpenter|
|2014-09-09||SDN @ LAN||LAN||S/BR/G.2X3(6)||Matt Kemp|
|2014-09-18||BOS @ PIT||BOS||S/BR/G.3XH(5);1-2;B-1||Jemile Weeks|