Brad Keselowski wins Coca-Cola 600

Brad Keselowski is a Coca-Cola 600 champion.

Keselowski and crew chief Jeremy Bullins decided to stay out during the final caution of the race when it happened because of William Byron’s spin. Race leader — and Byron teammate — Chase Elliott and his crew chief Alan Gustafson decided to pit and gave up the lead to second-place Keselowski, assuming that fresher tires would help solidify the win over the race’s final two laps.

They did not. Keselowski held off Jimmie Johnson for the win as Elliott restarted 11th with two laps to go.

“I feel like I’ve thrown this race away a handful of times and I felt we were gonna lose it today,” he said after the race. “I know we’ve lost it the way Chase lost it and that really stinks, and today we finally won it that way and I’m so happy for my team.”

The victory is Keselowski’s 31st in his Cup Series career and his first Coke 600 win.

“It’s been a great 10-year career I’ve had so far and I hate it took me 10 years to get this one,” Keselowski said. “I feel like I’ve had cars and a team good enough to do it many times over and it just slipped through our hands and today it didn’t. I’m just really proud of everyone and persistence pays off.”

Byron spun with less than 3 laps to go

Elliott looked like he was cruising to a win with less than three laps to go in the longest race of the NASCAR season. But Byron spun as Elliott was just more than two laps from the win because of a flat left-rear tire. At the time of Byron’s spin, Elliott was leading Keselowski by two seconds.

Johnson was third at the time. As both he and Keselowski stayed out, Elliott pitted with the hope that most everyone else would join him and that fresh tires would matter over the final two laps.

That didn’t work out either way. While Elliott made up eight spots over the course of the last two laps with his four fresh tires, he didn’t challenge for the lead as eight drivers decided to stay out on track ahead of those that pitted.

Johnson disqualified

Johnson’s great night turned sour during postrace inspection. His car failed the check after the race and, as a result, Johnson has been disqualified. He won’t earn any points for his race result and he finishes last.

Johnson’s crew chief Cliff Daniels said he thought something broke in the car that led to the failed inspection.

Alex Bowman leads 164 laps

Elliott passed Keselowski for what looked like it would be the win in the final stage. Elliott’s teammate Alex Bowman led a race-high 164 laps but finished 20th as he was one of the drivers in that final stage who decided to stay out on track during the final caution.

Unllike for Keselowski and Johnson, that decision didn’t work out too well for Bowman, who won the race’s first two stages. Bowman ended up finishing 20th.

Race delayed by over an hour

The annual NASCAR marathon was delayed over 68 minutes for rain midway through the first stage. Bowman got the lead after that resumption thanks to a two-tire pit stop and held it for nearly the entirety of the second stage.

The 600 was the only race of the day run like it was scheduled. The Monaco Grand Prix was canceled and the Indianapolis 500 was pushed to August, leaving NASCAR and the 600 as the only major Memorial Day weekend race.

Denny Hamlin starts race 7 laps down

Denny Hamlin was on pit road when the race began. Tungsten weight came off his car on the pace laps before the race and he was forced to pit to get more weight secured in his car before he could resume.

The tungsten is added to cars to help them make the minimum weight before a race and unsecured ballast comes with a four-race suspension for a team’s crew chief, car chief and race engineer. That means that Hamlin will likely be without crew chief Chris Gabehart and two other crew members for the next four races.

Full results

1. Brad Keselowski

2. Jimmie Johnson

3. Chase Elliott

4. Ryan Blaney

5. Kyle Busch

6. Kevin Harvick

7. Martin Truex Jr.

8. Kurt Busch

9. Tyler Reddick

10. Christopher Bell

11. Chris Buescher

12. Erik Jones

13. Cole Custer

14. Joey Logano

15. Austin Dillon

16. Aric Almirola

17. John Hunter Nemechek

18. Matt DiBenedetto

19. Michael McDowell

20. Alex Bowman

21. William Byron

22. Ross Chastain

23. Ryan Preece

24. Corey LaJoie

25. Ricky Stenhouse Jr.

26. Ty Dillon

27. Matt Kenseth

28. Ryan Newman

29. Daniel Suarez

30. Denny Hamlin

31. Brennan Poole

32. Gray Gaulding

33. BJ McLeod

34. Garrett Smithley

35. Timmy Hill

36. Quin Houff

37. Joey Gase

38. JJ Yeley

39. Bubba Wallace

40. Clint Bowyer

– – – – – – –

Nick Bromberg is a writer for Yahoo Sports.

More from Yahoo Sports: