25 Years/25 Players- How Each Team's Best Players From the Last 25 Years Would Fare Against Each Other

Greetings everyone,

While waiting on the data to be released that allowed me to run the 2022 simulation study (results here) I came up with a thought experiment. What if we took the best players, one for each season going back to 1997 for each franchise, and played them against each other? I had gotten the idea from a fanpost I saw long ago, wherein you had to pick 25 players over 25 years, and couldn't repeat players over the course of Orioles history. I thought, well, what if we did this for the last 25 years (excluding 2020, the less I think about that year the better, and all the rules in place that year mess with my sorting spreadsheet anyway) for each MLB team? What kind of teams would be created? What if we played a hypothetical schedule wherein all teams played each other with these created teams- who would come out on top?

The first thing I did was create the rosters themselves for each team. The rules were that every team had to have all defensive positions, including starting pitchers, play 162 games on the roster (for example, Brian Roberts played 137 games at 2B in 2006, so I needed to find someone else to cover the other 25. DeLino DeShields played in 96 games at 2B in 2000 amongst other places, so 2B was covered). Each team needed to field at least 11 pitchers as well. Players could not be chosen twice on the same team, but may be on different teams. The DH position would be covered by the leftover games above 162 at a position, or the DH position itself (so in the example above, DeShields could play DH for the remaining 71 games, plus any other games where the positions were already covered).

Next, I came up with a schedule. I decided that every team would play two games at home and away to teams not in their league, three games against non-divisional opponents in-league, then 10 or 11 games against division opponents. These series were then randomized in order. I then set the starting pitching match-ups, with most teams using a conventional 5-man rotation, and adjusting them and using spot starters if a team's starting five didn't quite have enough games (I used 2002 Rodrigo Lopez as such). This gave me the number of games each team would face against lefties and righties, which I'd use later.

The most time-consuming activity came next, which was to get data on every PA of every MLB batter going back to 1997. It took my computer a good two weeks to sort through the 4.5 million events that have happened in the league the last 25 years, sorting out the 100 or so different categories that go into it. Once that was completed, the data was normalized to eliminate biases based on the year that was played- a home run hit in 2019 was penalized since there were an abnormally high number of HR hit that year, whereas a home run hit in 2014 was enhanced since there was a power drought that season. This gives an even playing field- it removes the penalty to pitchers for throwing in offensive years and to batters for hitting in pitching-friendly years, and vice versa.

With the numbers crunched, and the pitching match-ups set, it was time to set the lineups, which may have been the trickiest thing to do in this whole simulation. After determining the number of games a team would start against either pitching hand, I had the teams select the highest OPS from the normalized data against that handed pitcher and used up all the eligible games at that position. Once those were used up, the second-highest OPS was used until they had no games left, and so on. I did this for the eight positions on the field, randomizing which games the best batter was in for each position- if you're really curious about this, ask in the comments. For the DH, the batter who still had games left- without exceeding his real-life total for that season- was then added to the lineup. With the starting nine set, I then sorted them, highest OPS to lowest, to create batting lineups for each game.

Once the player data, team data, schedule and lineups were fed into the machine, the teams played 1000 seasons against each other. The wins and losses were tracked, as well as division winners and wild cards for each season. I went with the current playoff structure and divisions, so three WC per league.


Wild cards Division playoffs average Avg. RF Avg. RA min max
NYA 389.67 607.50 997.17 97.26 952.60 767.616 78 117
BOS 626.00 368.00 994.00 94.74 877.23 733.37 77 112
TOR 677.42 24.50 701.92 83.08 788.17 776.284 66 103
TBA 62.83 0.00 62.83 70.93 750.82 854.227 49 88
BAL 37.75 0.00 37.75 69.04 780.58 910.452 45 88

Might as well rip the band-aid off right away. The Orioles didn't do so hot in this, having the second-lowest win total in the league, which I must admit I was disappointed to see. I figured their offense would be above average, but it wasn't, the average team scored 830 runs a year in this study. The pitching was consistently getting hammered, allowing the fourth-most runs in the league. It wasn't all bad, though, as the did manage to scrape some playoff appearances when the pitching was adequate. Meanwhile, New York and Boston, buoyed by some big names you know all too well, did very well here and almost always were in the playoffs.


Wild cards Division playoffs average Avg. RF Avg. RA min max
CLE 135.67 706.67 842.33 85.88 873.31 827.437 69 105
DET 224.50 127.67 352.17 77.24 863.44 901.523 57 97
CHA 184.50 114.33 298.83 76.89 805.48 840.008 59 99
MIN 78.17 34.83 113.00 71.97 754.67 854.826 54 90
KCA 37.50 16.50 54.00 69.48 723.18 853.261 52 88

The weakest division in the study, the Central was marked by mediocre pitching and hitting. Cleveland's pitching was OK while having an above-average offense, which was enough to win the division more often than not. The rest of the teams here, while not horrible, weren't really much of a threat to the rest of the league consistently. Had the Orioles been placed in this division instead, I imagine they'd be ahead of KC and around where the Twins ended up.


Wild cards Division playoffs average Avg. RF Avg. RA min max
HOU 7.50 991.00 998.50 99.11 863.57 668.491 79 117
SEA 276.33 6.00 282.33 76.73 820.23 877.051 56 98
TEX 111.75 0.00 111.75 72.18 866.16 975.006 52 93
ANA 91.25 2.00 93.25 71.91 746.33 836.771 52 93
OAK 59.17 1.00 60.17 70.56 754.53 855.131 50 89

The AL West was the least competitive division in the study, with the Astros running away with it and posting the best record in this study. Anchored on offense by the Killer Bs and recent players, their pitching was the best in the league. Texas was undone by the second-worst pitching in the league, and Anaheim and Oakland's offense prevented them from doing well in here.


Wild cards Division playoffs average Avg. RF Avg. RA min max
ATL 285.50 570.83 856.33 92.95 861.77 738.671 74 113
WAS 406.08 245.33 651.42 88.54 828.18 752.636 70 104
NYN 235.92 72.50 308.42 83.25 810.40 784.936 63 104
FLO 212.92 56.50 269.42 82.43 797.03 771.724 65 100
PHI 176.42 54.83 231.25 81.68 846.96 839.929 61 109

The NL was the most competitive and most surprising division. When making out the rosters I had the Braves and Phillies as co-favorites in this division, if not the entire league, and while the Braves held up their end of the bargin for the most part, the Phillies did not. Particularly surprising was their poor pitching performance- their rotation had the most combined WAR from their starting 5 by a good margin, yet gave up more runs than anyone in the division. The Marlins are a surprise here, as are the Expos/Nationals, with good pitching performances that were somewhat unexpected. The Braves pitching, with Maddux, Glavine, and Smoltz, were as good as can be expected, propelling them to the highest win total in this division.


Wild cards Division playoffs average Avg. RF Avg. RA min max
SLN 27.83 873.67 901.50 92.40 909.77 784.064 74 113
CHN 112.17 71.83 184.00 80.24 840.55 842.364 60 97
MIL 60.00 41.17 101.17 77.66 833.66 864.758 58 97
PIT 6.17 11.00 17.17 72.02 801.51 881.275 50 95
CIN 2.00 2.33 4.33 69.85 802.81 927.791 51 88

As has been the case for the last quarter-century, the Cardinals were the class of this division, with the Cubs occasionally intruding. With sluggers McGwire, Pujols, and Berkman, they were third in the MLB in runs scored, while limiting opponents to a below-average number of runs. While making out the rosters, I had the Brewers pegged as one of the worst teams in the field, but they acquitted themselves here with an alright finish while making the playoffs every now and then. The Reds and Pirates, without much pitching help, struggled.


Wild cards Division playoffs average Avg. RF Avg. RA min max
LAN 250.42 717.33 967.75 97.23 941.76 769.659 78 117
SFN 527.58 179.83 707.42 89.71 874.32 770.381 70 108
SDN 356.33 53.00 409.33 84.87 790.21 733.253 65 105
ARI 340.33 49.83 390.17 84.64 864.02 815.522 62 103
COL 0.33 0.00 0.33 65.54 874.78 1089.617 49 86

In arguably the best division in the study, the Dodgers once again emerged as the best team in the NL. A deep, holeless lineup supported a very strong pitching rotation to be the at the top of a very competitive division. The Padres were another surprise here, I had figured them to be near the bottom while making their roster but instead were consistent playoff entrants. The Rockies, as expected, were able to put up some runs but couldn't stop anyone- part of that was the effects from Coors Field being baked into the simulation, but their pitching staff has never been a strength so it was difficult to get good pitchers onto their roster. It showed here, with the lowest win total in the league.


The league as a whole hit a lot of home runs, but not enough to be a total anomaly. Teams averaged about 220 HRs hit per season, which is on par for the 2019 season. Batting averages were around .260 from what I could tell, close to the league average during this time, but the increase in power made for an offensive league.

The talent level in the rosters is very comparable to an All-star team. Most players were around 5-6 WAR, with a couple of 10+ WAR seasons as well. For bullpen arms, some elite closers got 4+, while most other relievers were around 2-2.5 WAR. There were a couple exceptions to this (Houston hasn't had a good catcher in a looooong time it turns out), but you'd be surprised how well just about every team was able to put an All-star caliber player at every position.

Ivan Rodriguez was on four different teams, the Rangers, Marlins, Astros and Tigers. No one else was on that many. Kevin Brown, Zack Greinke, Alex Rodriguez, and Pedro Martinez were on three teams. Several players appeared twice.

By and large, this went about the way you'd expect if you simply looked at a team's record since 1997. The teams that have done well, like Houston, Boston, the Yankees, Dodgers, Braves, did well here. The teams with bad records, Colorado, Baltimore, Kansas City, Cincinnati, did not. There were a few surprises, the Marlins perhaps the biggest of all to the upside, along with the Expos/Nationals, but not many. This makes sense obviously, good teams have good players, and when a core of good players stay together for a number of years, like with what Houston is doing currently, they will win a lot of games together and full out a roster of all-star players like you see here.

I'll leave you with the full rosters of every team in the table below. This was a lot of fun to put together, code, and finally simulate and see the results of over the past month. I hope you enjoyed seeing the results of this as much as I did, and if you've made it this far, thanks for reading!

Special thanks to Brandon Isleib for his help, namely filling out the Pirates roster and going over all rosters!

tl;dr version

Yet another simulation where the Yankees, Red Sox, Astros, Dodgers and Braves do well and the Orioles don't. Blech.

1997 Devon White Greg Maddux Mike Mussina Nomar Garciaparra Mark Grace Frank Thomas Jeff Shaw Matt Williams Larry Walker Justin Thompson Craig Biggio Kevin Appier Tim Salmon Mike Piazza Kevin Brown Doug Jones Chuck Knoblauch Todd Hundley Andy Pettitte Matt Stairs Curt Schilling Francisco Cordova Ray Lankford Tony Gwynn J.T. Snow Randy Johnson Jim Mecir Ivan Rodriguez Roger Clemens Pedro Martinez
1998 Jay Bell Tom Glavine Scott Erickson Mo Vaughn Rod Beck Albert Belle Pete Harnisch Kenny Lofton Vinny Castilla Damion Easley Moises Alou Jose Offerman Chuck Finley Scott Radinsky Mark Kotsay Jeff Cirillo Matt Lawton John Olerud Paul O'Neill Kenny Rogers Scott Rolen Jason Kendall Mark McGwire Kevin Brown Rich Aurilia Ken Griffey Rolando Arrojo Juan Gonzalez Paul Quantrill Ugueth Urbina
1999 Matt Williams Chipper Jones B.J. Surhoff Rheal Cormier Henry Rodriguez Keith Foulke Barry Larkin Manny Ramirez Pedro Astacio Doug Brocail Jeff Bagwell Jermaine Dye Garret Anderson Eric Karros Preston Wilson Dave Nilsson Brad Radke Edgardo Alfonzo Derek Jeter Doug Jones Doug Glanville Kevin Young Fernando Tatis Reggie Sanders Marvin Benard Jamie Moyer Fred McGriff Jeff Zimmerman Shawn Green Steve Klein
2000 Steve Finley Andruw Jones Delino DeShields Pedro Martinez Jon Lieber Ray Durham Ken Griffey Bartolo Colon Gabe White Bobby Higginson Richard Hidalgo Johnny Damon Troy Glaus Kevin Brown Luis Castillo Jeff D'Amico LaTroy Hawkins Armando Benitez Bernie Williams Tim Hudson Bobby Abreu Brian Giles Mike Matheny Damian Jackson Jeff Kent Alex Rodriguez Roberto Hernandez Kenny Rogers Carlos Delgado Jose Vidro
2001 Luis Gonzalez Mike Remlinger Jeff Conine Tim Wakefield Sammy Sosa Jose Valentin Scott Sullivan Roberto Alomar Todd Helton Steve Sparks Octavio Dotel Carlos Beltran Troy Percival Gary Sheffield Cliff Floyd Chad Fox Joe Mays Mike Piazza Mike Mussina Jason Giambi Tomas Perez Aramis Ramirez Steve Kline Ryan Klesko Barry Bonds Bret Boone Victor Zambrano Alex Rodriguez Shannon Stewart Javier Vazquez
2002 Curt Schilling Chris Hammond Rodrigo Lopez Derek Lowe Mark Bellhorn Magglio Ordonez Austin Kearns Jim Thome Denny Stark Juan Acevedo Roy Oswalt Paul Byrd David Eckstein Shawn Green Derrek Lee Jose Hernandez J.C. Romero Mark Guthrie Jason Giambi Barry Zito Pat Burrell Mike Williams Edgar Renteria Brian Lawrence Benito Santiago John Olerud Randy Winn Rafael Palmeiro Roy Halladay Vladimir Guerrero
2003 Alex Cintron Javy Lopez Melvin Mora Manny Ramirez Mark Prior Esteban Loaiza Jose Guillen David Riske Steve Reed Dmitri Young Billy Wagner Darrell May Brendan Donnelly Eric Gagne Ivan Rodriguez Richie Sexson Torii Hunter David Weathers Jose Contreras Eric Chavez Jim Thome Reggie Sanders Albert Pujols Rondell White Marquis Grissom Shigetoshi Hasegawa Aubrey Huff Michael Young Vernon Wells Livan Hernandez
2004 Randy Johnson J.D. Drew Miguel Tejada Curt Schilling Carlos Zambrano Aaron Rowand Adam Dunn Victor Martinez Joe Kennedy Ivan Rodriguez Lance Berkman Jaime Cerda Vladimir Guerrero Adrian Beltre Armando Benitez Ben Sheets Johan Santana Braden Looper Hideki Matsui Mark Mulder Ryan Madson Oliver Perez Jim Edmonds Mark Loretta Jason Schmidt Ichiro Suzuki Rocco Baldelli Ryan Drese Orlando Hudson Brad Wilkerson
2005 Chad Tracy Rafael Furcal Brian Roberts Jason Varitek Derrek Lee Tadahito Iguchi Jason LaRue Coco Crisp Brian Fuentes Placido Polanco Roger Clemens John Buck Bartolo Colon Jeff Kent Dontrelle Willis Derrick Turnbow Juan Rincon Pedro Martinez Alex Rodriguez Huston Street Billy Wagner Jason Bay Chris Carpenter Scott Linebrink Scott Eyre Julio Mateo Julio Lugo Mark Teixeira Gregg Zaun Hector Carrasco
2006 Brandon Webb John Smoltz Corey Patterson Jonathan Papelbon Bob Howry Joe Crede Bronson Arroyo Rafael Betancourt Jason Jennings Carlos Guillen Dan Wheeler Mark Teahen Francisco Rodriguez Takashi Saito Miguel Cabrera Bill Hall Joe Nathan Carlos Beltran Chien-Ming Wang Nick Swisher Ryan Howard Freddy Sanchez Hector Luna Cla Meredith Ray Durham Rafael Soriano Ty Wigginton Gary Matthews B.J. Ryan Nick Johnson
2007 Jose Valverde Peter Moylan Erik Bedard Josh Beckett Aramis Ramirez Javier Vazquez Aaron Harang CC Sabathia Matt Holliday Magglio Ordonez Hunter Pence Gil Meche John Lackey Russell Martin Hanley Ramirez Corey Hart Jason Bartlett David Wright Jorge Posada Mark Ellis Jimmy Rollins Tom Gorzelanny Russ Springer Jake Peavy Kevin Correia J.J. Putz Scott Kazmir Joaquin Benoit Jeremy Accardo Saul Rivera
2008 Chad Qualls Martin Prado Nick Markakis Dustin Pedroia Geovany Soto Bobby Jenks Edinson Volquez Cliff Lee Chris Iannetta Curtis Granderson Geoff Geary Joakim Soria Maicer Izturis Chad Billingsley Dan Uggla CC Sabathia Justin Morneau Johan Santana Mariano Rivera Brad Ziegler Brad Lidge Paul Maholm Ryan Ludwick Jody Gerut Tim Lincecum Raul Ibanez Dioner Navarro Marlon Byrd Scott Downs Cristian Guzman
2009 Justin Upton Jair Jurrjens George Sherrill Ramon Ramirez Kosuke Fukudome Matt Thornton Nick Masset Asdrubal Cabrera Troy Tulowitzki Brandon Lyon Ivan Rodriguez Zack Greinke Chone Figgins Manny Ramirez Josh Johnson Prince Fielder Joe Mauer Gary Sheffield Mark Teixeira Andrew Bailey Chase Utley Garrett Jones Adam Wainwright Adrian Gonzalez Matt Cain Endy Chavez Ben Zobrist Darren O'Day Adam Lind Ryan Zimmerman
2010 Kelly Johnson Jason Heyward Jeremy Guthrie Adrian Beltre Carlos Marmol Paul Konerko Ramon Hernandez Shin-Soo Choo Ubaldo Jimenez Austin Jackson Chris Johnson Billy Butler Mike Napoli Hong-Chih Kuo Clay Hensley Rickie Weeks Brian Duensing Francisco Rodriguez Kerry Wood Craig Breslow Roy Halladay Evan Meek Matt Holliday Mike Adams Aubrey Huff Felix Hernandez Carl Crawford Josh Hamilton John Buck Josh Willingham
2011 Ian Kennedy Jonny Venters Matt Wieters Jacoby Ellsbury Sean Marshall Jesse Crain Brandon Phillips Carlos Santana Carlos Gonzalez Alex Avila Mark Melancon Alex Gordon Jered Weaver Matt Kemp Emilio Bonifacio Ryan Braun Michael Cuddyer Jose Reyes CC Sabathia Coco Crisp Cliff Lee Joel Hanrahan Lance Berkman Cameron Maybin Pablo Sandoval Jason Vargas James Shields Mike Napoli Jose Bautista Tyler Clippard
2012 Miguel Montero Craig Kimbrel Darren O'Day Pedro Ciriaco Starlin Castro A.J. Pierzynski Aroldis Chapman Vinnie Pestano Rafael Betancourt Prince Fielder Wilton Lopez Kelvin Herrera Albert Pujols Mark Ellis Wade LeBlanc Yovani Gallardo Josh Willingham R.A. Dickey Robinson Cano Josh Reddick Carlos Ruiz Jason Grilli Yadier Molina Chase Headley Buster Posey John Jaso David Price Matt Harrison Edwin Encarnacion Craig Stammen
2013 Brad Ziegler Evan Gattis Chris Davis Koji Uehara Travis Wood Jose Quintana Shin-Soo Choo Jason Kipnis Wilin Rosario Miguel Cabrera Jason Castro Greg Holland Chris Iannetta Clayton Kershaw Jose Fernandez Carlos Gomez Glen Perkins Juan Lagares Brett Gardner Bartolo Colon Domonic Brown Andrew McCutchen Matt Carpenter Nick Hundley Hunter Pence Hisashi Iwakuma Evan Longoria Adrian Beltre Aaron Loup Denard Span
2014 Evan Marshall Justin Upton Nelson Cruz Daniel Nava Anthony Rizzo Adam Eaton Johnny Cueto Michael Brantley Adam Ottavino Max Scherzer Tony Sipp Wade Davis Howie Kendrick Yasiel Puig Bryan Morris Jonathan Lucroy Phil Hughes Daniel Murphy Adam Warren Josh Donaldson Cole Hamels Neil Walker Pat Neshek Rene Rivera Santiago Casilla Robinson Cano Jake McGee Shawn Tolleson Jose Reyes Anthony Rendon
2015 Paul Goldschmidt Jim Johnson Manny Machado David Ortiz Jake Arrieta Melky Cabrera Joey Votto Bryan Shaw Nolan Arenado J.D. Martinez Dallas Keuchel Lorenzo Cain Cesar Ramos Zack Greinke A.J. Ramos Francisco Rodriguez Eddie Rosario Curtis Granderson Dellin Betances Stephen Vogt Odubel Herrera Gerrit Cole John Lackey Tyson Ross Matt Duffy Carson Smith Logan Forsythe Keone Kela Josh Donaldson Bryce Harper
2016 Jean Segura Freddie Freeman Zach Britton Craig Kimbrel Kris Bryant Chris Sale Raisel Iglesias Francisco Lindor DJ LeMahieu Justin Verlander Carlos Correa Alcides Escobar Mike Trout Joe Blanton Christian Yelich Tyler Thornburg Brian Dozier Addison Reed Gary Sanchez Ryan Dull Hector Neris Mark Melancon Seunghwan Oh Fernando Rodney Johnny Cueto Kyle Seager Alex Colome Cole Hamels Aaron Sanchez Wilson Ramos
2017 Zack Greinke Tyler Flowers Mychal Givens Chris Sale Mike Montgomery Anthony Swarzak Scooter Gennett Corey Kluber Charlie Blackmon Justin Upton Jose Altuve Eric Hosmer Blake Parker Kenley Jansen Giancarlo Stanton Travis Shaw Ervin Santana Wilmer Flores Chad Green Ryan Madson Pat Neshek Felipe Rivero Tyler Lyons Brad Hand Cory Gearrin Mike Zunino Wilson Ramos Alex Claudio Marcus Stroman Gio Gonzalez
2018 T.J. McFarland Johan Camargo Richard Bleier Mookie Betts Javier Baez Joakim Soria Jared Hughes Jose Ramirez Kyle Freeland Blaine Hardy Alex Bregman Whit Merrifield Justin Upton Max Muncy J.T. Realmuto Christian Yelich Mitch Garver Jacob DeGrom Gleyber Torres Jed Lowrie Aaron Nola Jameson Taillon Miles Mikolas Kirby Yates Dereck Rodriguez Edwin Diaz Blake Snell Jurickson Profar Seung Hwan Oh Max Scherzer
2019 Ketel Marte Ozzie Albies John Means Brandon Workman Brandon Kintzler James McCann Eugenio Suarez Shane Bieber Scott Oberg Shane Greene Justin Verlander Ian Kennedy Hansel Robles Cody Bellinger Jarlin Garcia Josh Hader Jorge Polanco Amed Rosario Zack Britton Marcus Semien Ranger Suarez Kevin Newman Jack Flaherty Joey Lucchesi Will Smith Tim Beckham Diego Castillo Shin-Soo Choo Ken Giles Brian Dozier
2021 Noe Ramirez Luke Jackson Cedric Mullins Xander Bogaerts Willson Contreras Tim Anderson Jonathan India Cal Quantrill Brendan Rodgers Casey Mize Kyle Tucker Salvador Perez Raisel Iglesias Walker Buehler Dylan Floro Brandon Woodruff Josh Donaldson Marcus Stroman Gerrit Cole Mark Canha Bryce Harper Jacob Stallings Paul Goldschmidt Fernando Tatis Brandon Crawford Ty France Brandon Lowe Brett Martin Marcus Semien Trea Turner
2022 Daulton Varsho Max Fried Adley Rutschman Christian Vazquez Christopher Morel Dylan Cease Alexis Diaz Emmanuel Clase Daniel Bard Andrew Chafin Cristian Javier Bobby Witt Shohei Ohtani Trea Turner Sandy Alcantara Corbin Burnes Giovanny Urshela Mark Canha Aaron Judge Sean Murphy J.T. Realmuto Oneil Cruz Ryan Helsley Manny Machado Carlos Rodon Erik Swanson Jason Adam Martin Perez Alek Manoah Keibert Ruiz

FanPosts are user-created content and do not necessarily reflect the views of the editors of Camden Chat or SB Nation. They might, though.