Donovan Solano chased Matt Harvey from the game with a single that drove in two runs in the sixth inning, helping the Miami Marlins beat the New York Mets, 3-0, in the finale of a four-game series.
Logan Morrison hit an RBI single to account for Miami's other run.
Tom Koehler (3-6) tossed six innings for the Marlins, allowing five hits and five walks.
Matt Harvey (8-3) allowed only one hit before running into trouble in the sixth inning, where he gave up all three runs. He struck out eight in 5 2/3 innings. Miami's offense gave Harvey his first earned run since the All-Star break, snapping a streak of 20 2/3 innings.
"My job is to go out and put up zeroes, and obviously I didn't do that today," Harvey said. "I'm not happy about it."
Justin Turner went 2-for-4 for the Mets. who have only won two times in their last seven games.
Steve Cishek pitched the ninth inning for his 23rd save of the season.
The Mets had their chances in the game, but failed to convert. They loaded the bases in the third inning and had a man on third with one out in the fourth, but could not score a run. They finished the game 0-for-7 with runners in scoring position.
"It was a battle for him too," Marlins manager Mike Redmond said of Koehler. "He pitched out of quite a few jams."
Jake Marisnick made a great diving catch in center field to rob Marlon Byrd of a base hit and then doubled David Wright off first to end a New York threat in the fifth inning.
Juan Pierre, who entered the game as the pinch-hitter for Koehler, and Christian Yelich started off the sixth inning with a pair of singles to place men at first and third. Morrison drove a two-out single to right to bring Pierre home for the first run. Harvey then hit Ed Lucas on the left wrist to load the bases before Solano blooped a single to right to score Yelich and Morrison.
Marlins' pitchers recorded the lowest July ERA in club history with 3.24 over 26 games ... Miami's bullpen pitched 11 2/3 scoreless innings in the series against the Mets.