HOUSTON (AP) Dallas Keuchel had a solid start on Thursday.
Unfortunately for the Houston Astros, Arizona's Zack Greinke was better.
Greinke struck out a season-high 11, and the Diamondbacks used a three-run seventh inning to beat the Astros 3-0 in a matchup of AL Cy Young Award winners.
''It just seems like every pitch I throw, the game hinges on it, and that's a tough feeling,'' Keuchel said. ''But Greinke was as good as advertised. I thought the game was a very good pitcher's duel.''
Greinke (7-3), the 2009 winner with Kansas City, allowed a season-low four hits - all singles - over seven innings and walked none. He won his fourth straight start and stopped Arizona's three-game skid.
''He throws first-pitch strikes, he throws every pitch for a strike, he pitches on the margins, he does things to entice you to swing a lot, and he had his put-away pitches going for him,'' Houston manager A.J. Hinch said. ''It was certainly his day.''
Houston, which has won its previous five games, missed a chance to sweep the four-game, home-and-home series.
Daniel Hudson struck out two in a perfect eighth. Brad Ziegler allowed one hit in the ninth and got his franchise-record 38th straight save, his 10th this season. He has the longest active saves streak among big league relievers.
Keuchel (3-7), last year's Cy Young winner, gave up three runs and six hits in six-plus innings. He has lost six of seven decisions. His struggles come a year after he won a career-high 20 games with a 2.48 ERA.
''Nobody wants to win more than I do, and I don't take these losses lightly,'' he said ''It wears on you, and I've just got to be better.''
The game was scoreless before Welington Castillo's RBI double off Keuchel put Arizona ahead. Chris Owings added a run-scoring single and Nick Ahmed a sacrifice fly.
''They put two swings on Dallas, really the whole day, that created any sort of havoc,'' Hinch said. ''He didn't have much room for error against Greinke.''
It was the first scoreless outing this season for Greinke, who is 7-1 in his last 10 starts to lower his ERA to 4.29; he started 0-2 with a 9.90 ERA.
Greinke didn't allow a hit until George Springer's fly ball to shallow center dropped for a single starting the fourth inning.
Houston didn't get another hit until Tony Kemp singled with one out in the sixth. Jose Altuve singled with two outs to send Kemp to third, but they were stranded when Carlos Correa grounded out.
Keuchel had allowed just two hits, which were both singles, and had retired 10 in a row when Rickie Weeks singled to start the seventh. Castillo's double, which rolled to the wall in center field, scored Weeks.
Diamondbacks: LF David Peralta (right wrist inflammation) was to play an extended spring training game on Thursday before likely joining Triple-A Reno to begin a rehabilitation assignment on Saturday. The Diamondbacks hope he can come of the disabled list on Monday.
Astros: Houston catcher Jason Castro was out with a fever. Hinch had hoped he would be able to play on Thursday after Evan Gattis caught 11 innings the night before.
Diamondbacks: Archie Bradley (2-0, 6.11) will make his fourth start in the opener of a three-game series against the Chicago Cubs on Friday. Bradley pitched a career-high 7 1/3 innings and fanned a career-best nine in a win against the Padres in his last start.
Astros: Doug Fister (4-3, 3.86) is scheduled to start the opener of a three-game set with Oakland on Friday. Fister has won his last three decisions and the Astros have won in each of his last six starts.