Jarrod Dyson doubled and scored the go-ahead run in the fifth inning and the Kansas City Royals held on to beat the Detroit Tigers 3-2 on Monday, completing a four-game sweep on the road for the first time in nearly 22 years.

The AL Central-leading Royals (14-7) have won a season-high five straight and own the best record in the league. They visit Pittsburgh this evening.

Detroit (7-16) has the worst record in the majors after losing 10 of its last 11 games and is off to its worst start since 2003.

Kansas City starter Brad Keller (2-2) gave up two runs and eight hits over six innings. Scott Barlow and Greg Holland followed, each throwing a scoreless inning. Josh Staumont pitched the ninth for his second save in as many chances.

Spencer Turnbull (1-1) gave up three runs on five hits and no walks while striking out five. Detroit relievers combined to throw three innings of scoreless relief, but its hitters failed to take advantage of chances to extend or win the game, leaving 11 runners on base.

PHILLIES 2, CARDINALS 1: Zack Wheeler took a one-hit shutout into the ninth inning and Rhys Hoskins homered twice as Philadelphia beat St. Louis.

Hoskins’ seventh career multi-homer game and second this season helped the Phillies improve to 3-1 against St. Louis.

Wheeler (2-2) struck out nine and edged Cardinals starter Adam Wainwright in a classic pitchers’ duel that took just 2 hours, 22 minutes.

Wheeler retired his first 14 batters until Paul DeJong’s opposite-field single to right ended the streak in the fifth.

Wainwright (0-3) tossed a complete game on 107 pitches, allowing six hits and striking out eight.

BRAVES 8, CUBS 7: Freddie Freeman hit a three-run homer and Atlanta woke up offensively after a grim doubleheader, overcoming a grand slam by Kris Bryant to beat Chicago.

The Braves were coming off two shutout losses to Arizona the previous afternoon — managing just a single hit over 14 innings. Madison Bumgarner held Atlanta without a hit in his seven-inning victory, though it did not qualify as an official no-hitter.

Eager to make up for that embarrassing performance, the Braves pounded Zach Davies for four runs and five hits in the very first inning. Travis d’Arnaud’s two-run single was the biggest blow.

The Cubs tied it on Bryant’s sixth career grand slam, a shot off Charlie Morton (2-1) that landed in the Chicago bullpen with two outs in the third.

But Freeman broke a 5-all tie with a mammoth, two-out shot of his own, driving one deep into the right-field seats against Brandon Workman (0-2).

The right-hander’s knees buckled when the reigning NL MVP made contact, while right fielder Jason Heyward barely moved as the ball sailed over his head.

Freeman got the Braves’ only hit Sunday, a single off Zac Gallen in the opener of the twinbill.

Dansby Swanson also homered for the Braves, a solo shot in the third.

Morton scraped out the win, despite surrendering five runs in 51/3 innings.

Willson Contreras hit a two-run homer off Tyler Matzek in the seventh, but three Braves relievers combined to preserve the win. Will Smith worked around a walk in the ninth for his fifth save.

MARLINS 8, BREWERS 0: Trevor Rogers pitched six spotless innings, Corey Dickerson finished a triple shy of the cycle and Miami beat Milwaukee.

Dickerson drove in three runs, two against Brewers starter Corbin Burnes (2-2), who had only allowed one earned run over four outings this season.

Since giving up that one run — a homer by Twins outfielder Byron Buxton on April 3 — Burnes had tossed 18 scoreless innings, striking out 29 without walking a batter while allowing a total of seven hits.

He struck out nine Monday, giving him 49 for the season, and still hasn’t issued a walk in 291/3 innings. He needs three more strikeouts without a walk his next time out to break a record set in 1893.

ORIOLES 4, YANKEES 2: Cedric Mullins hit two home runs and a double, Matt Harvey pitched six impressive innings and Baltimore beat New York.

Baltimore moved one game ahead of the last-place Yankees in the AL East.

Harvey (2-1) won consecutive starts for the first time since winning four in a row with Cincinnati from June 21-July 13, 2018. He allowed one run and three hits, striking out five and walking three.

The Yankees pulled within 4-2 in the eighth on an RBI single by Gio Urshela. But on the play, Aaron Judge was thrown out at third before DJ LeMahieu touched home plate, and New York manager Aaron Boone was ejected for arguing the call.

César Valdez earned a four-out save for the Orioles, who improved to 4-13 at home against the Yankees since the beginning of the 2019 season

Deivi García (0-1) was recalled from the Yankees’ alternate training site to make the start.

The 21-year-old right-hander made his major league debut on Aug. 30, 2020, against the Mets, finishing the year 3-2 with a 4.98 ERA in six starts.

INDIANS 5, TWINS 3: Jordan Luplow hit a two-run homer in the 10th inning off Alex Colomé, giving Cleveland a victory over Minnesota.

Luplow’s second career game-ending homer was a leadoff shot that easily cleared the wall in left field, scoring free runner César Hernández from second base. Minnesota fell to 0-5 in extra-inning games.

Emmanuel Clase (2-1) worked one perfect inning for the win, helping Cleveland to its second straight victory. Luplow was the only batter faced by Colomé (1-3).

Luis Arraez gave the Twins a 3-2 lead in the eighth when he singled home Jake Cave with two outs, but José Ramírez answered in the bottom half with a homer off Tyler Duffey that hooked just inside the foul pole in right.

Indians starter Zach Plesac allowed three runs in a season-high 72/3 innings, striking out four. The right-hander had dropped his last two starts, giving up six runs in both games over 52/3 total innings.

José Berríos of the Twins worked 52/3 innings, permitting two runs and five hits. The right-hander has never lost at Progressive Field, going 3-0 with a 3.83 ERA in seven outings.

ATHLETICS 2, RAYS 1: Sean Murphy homered, Sean Manaea got some key defensive help and Oakland bounced back a day after their 13-game winning streak ended.

After Matt Chapman drew a two-out walk from Rich Hill (1-1) in the fourth innning, Murphy made it 2-1 with a drive to left field.

Manaea (3-1) threw 100 pitches over five innings, giving up one run and four hits.

Yusmeiro Petit went two perfect innings, Jake Diekman worked out of a second-and-third, one-out jam in the eighth and Lou Trivino closed for his third save.

Oakland, which lost 8-1 at Baltimore on Sunday, is 15-2 over the last 17 games after starting the year 0-6.

Hill struck out 10 in six innings, allowing only two hits.