CHICAGO — John Lackey pitched seven solid innings for his first win in six weeks and Miguel Montero drove in three runs, helping the Chicago Cubs sweep the Cincinnati Reds with a 9-2 victory on Wednesday night.

Kris Bryant hit his 38th homer and Dexter Fowler also connected as major league-leading Chicago moved a season-high 42 games over .500. The Cubs (97-55) also matched their win total from a year ago and lowered their magic number for clinching home-field advantage throughout the NL playoffs to two over Washington.

Lackey (10-8) allowed two runs and five hits in his first win since he beat the Angels on Aug. 9. The right-hander, who retired his last 14 batters, went 0-1 with a 2.55 ERA in his previous four starts.

The last-place Reds lost for the seventh time in eight games. They managed just five runs and 19 hits in the three-game series against the NL Central champions.

Jose Peraza hit a tying RBI single in Cincinnati's two-run second, but Chicago pulled away from there.

Montero hit an RBI single in the third and a two-run single with two out in the sixth.

Bryant capped the scoring with a two-run shot to left in the seventh. It was Bryant's 10th homer of the year against Cincinnati, tied for the second most for a single season against the Reds.

Rockies 11, Cardinals 1: Nolan Arenado hit a grand slam, German Marquez pitched five solid innings for his first major league win and Colorado slowed St. Louis' playoff chase.

Arenado made it 6-1 in the second with his NL-leading 39th homer.

Marquez (1-0) made his first big league start after three appearances out of the bullpen. He allowed one run and struck out three. At 21 years, 212 days, Marquez was the second-youngest pitcher in Rockies' history to earn his first win. The youngest was Jamey Wright at 21 years, 206 days.

Phillies 8, White Sox 3: Tommy Joseph homered, doubled and drove in three runs and Jerad Eickhoff outpitched Chris Sale in Philadelphia's victory over Chicago.

Joseph has 21 home runs, third most among rookies in the majors. The Phillies teed off on Sale (16-9), tagging the ace for six runs and seven hits in four innings.

Eickhoff (11-13) pitched seven innings and gave up six hits, including solo home runs by Adam Eaton, Todd Frazier and Alex Avila homered, and struck out six.

Pirates 4, Brewers 1: Sean Rodriguez hit a home run and a two-run single, Andrew McCutchen went deep, rookie Chad Kuhl pitched six strong innings.

Braves 4, Mets 3: Center fielder Ender Inciarte robbed Yoenis Cespedes of a winning homer for the final out and New York suffered another costly loss. Atlanta's Freddie Freeman extended his hitting streak to a career-best 25 games and has reached base safely in 41 straight.

Red Sox 5, Orioles 1: Boston scored five unearned runs in the sixth inning after first baseman Chris Davis' throwing error and beat Baltimore to pad its AL East lead.

Yankees 11, Rays 5: Rookie Gary Sanchez hit two more homers and drove in five runs and Masahiro Tanaka won despite allowing four home runs in the third inning.

Nationals 8, Marlins 3: Max Scherzer pitched 6 2-3 innings to tie for the National League victory lead with 18. Scherzer (18-7) allowed three runs and struck out eight to push his major league-leading total to 267.

Indians 4, Royals 3: Corey Kluber allowed two runs and struck out nine in 6 1/3 innings, and the Cleveland beat Kansas City to eliminate the reigning World Series champions from the AL Central race.

Angels 5, Rangers 3: Mike Trout hit his 28th homer and Jered Weaver went six innings for his 150th victory in an Angels uniform.

Mariners 2, Blue Jays 1: Robinson Cano drove in the winning run with a sacrifice fly in the 12th inning and Seattle avoided a series sweep.

Astros 6, A’s 5: Evan Gattis homered twice, catcher Jason Castro threw out ex-Cub Arismendy Alcantara trying to steal second to end the game and Houston beat Oakland to complete a series sweep.