Dexter Fowler helped the St. Louis outfielder cap off a career-high five-RBI night as the Cardinals beat the Kansas City Royals 8-6.
Fowler helped St. Louis tie a season-high with its sixth straight win.
Kansas City has lost four in a row and six of seven.
St. Louis climbed within one game of the first-place Chicago Cubs in the NL Central.
Fowler broke a 3-3 tie in the seventh inning with his 15th homer of the season. He ripped the first pitch from Neftali Feliz for his third career slam.
Lorenzo Cain had four hits for the Royals, who lost all four games in the four-game, home-and-home set.
Fowler ripped a run-scoring double to trigger a three-run outburst in the sixth inning that helped erase a 3-0 deficit.
Trevor Rosenthal recorded four outs to pick up his 10th save in 12 opportunities.
Pinch-hitter Brandon Moss brought the Royals within 7-5 with a two-run, bases-loaded double in the eighth that came within a foot of clearing the wall.
Whit Merrifield followed with a sacrifice fly. But Rosenthal got Cain to fly out with the tying run on third.
Tyler Lyons (1-0) picked up the win in relief of Lance Lynn, who surrendered two earned runs in six innings.
Mike Minor (5-4) took the loss.
Melky Cabrera gave the Royals a 3-0 lead with a two-run triple in the fifth.
Kansas City starter Jason Hammel gave up two earned runs and three hits over five-plus innings. He has allowed three earned runs or less in each of his last seven starts.
Cain tied a career high with his four hits. He has 15 hits in his last 29 plate appearances.
Adam Wainwright (11-5, 5.00) takes on RHP Mike Foltynewicz (10-6, 3.94) in the opener of a three-game set against Atlanta in St. Louis on Friday.
>>White Sox Sweep Astros
Rookie Yoan Moncada homered to tie the game in the ninth inning and then drove in the game-winnerwith a single in the 11th to lead the White Sox to 3-2 win Thursday night, completing an improbable series sweep of the AL's best team.
In the 11th, Leury Garcia led off with a single past diving second baseman Jose Altuve that was then bobbled by right fielder Josh Reddick, with Garcia advancing to second on the error. Altuve dove again for Moncada's hit off Francis Martes two pitches later but could only watch as the White Sox celebrated moments later near his spot in the infield.
Earlier, Moncada homered in the ninth with one out against Astros closer Ken Giles for his second career home run.
It was the third blown save of the season for Giles, who has converted 22.
Martes (4-2) took the loss after striking out all three batters he faced in the 10th inning, and then allowing the two singles in the 11th.
David Holmberg (2-3) got the last out of the 11th to earn the win. Carlos Rodon threw his third straight quality start without earning a win.
Rodon, a left-hander, tied a career-high with eight innings pitched, striking out four and allowing two runs on nine hits. Jake Petricka, Tyler Clippard, Brad Goldberg and Holmberg combined to hold the Astros scoreless over the last three innings.
Houston right-hander Brad Peacock struck out five and gave up one run and seven hits in 6 1/3 innings.
Jake Marisnick hit a home run and Marwin Gonzalez added an RBI double for the Astros, who have lost seven of their last nine games.
The Astros (71-43) still have a comfortable lead in the AL West.
Kansas City comes to town for a three-game series, starting Friday with Royals LHP Danny Duffy (7-7, 3.48) taking on RHP Reynaldo Lopez, who is making his season debut.