Greinke didn't allow any scoring until making his final pitch before a rain delay in the seventh inning, and the Kansas City Royals prevented the Pirates from sweeping an interleague series for the first time since 2001 by winning 3-2 on Sunday.
David DeJesus hit a solo homer off Charlie Morton (0-1) and drove in two runs to support Greinke (10-3), who gave up seven hits in 6 1/3 innings ahead of the 59-minute delay. Greinke became the AL's fourth 10-game winner, striking out three and walking none during a second successive effective start. His 1.95 ERA leads the majors.
"He's one of best in baseball and showed why," Freddy Sanchez said. "He pretty much shut us down."
The Royals, ending 8-10 against the NL, halted a three-game losing streak and made sure the Pirates didn't finish with their best record since interleague play began in 1997. They went 8-7, the same record they had in 2001.
Greinke wasn't overpowering, yet didn't allow an extra-base hit until Andy LaRoche tripled off the right-field wall during a driving rain in the seventh to score brother Adam LaRoche, who singled. Immediately after Adam LaRoche made it down the muddy third-base line, plate umpire Tom Hallion stopped play.
"It felt like I could throw it wherever I wanted to [for five innings]," said Greinke, who had trouble gripping the ball once a hard rain began falling. "I've pitched in bad weather before, but usually better than that."
Once the game resumed, reliever Jamey Wright got Jason Jaramillo to ground out, scoring Andy LaRoche with a run that was charged to Greinke. Wright and John Bale combined for a scoreless eighth. Joakim Soria retired all three batters he faced for his ninth save in 11 opportunities.
"Zack was having a little bit of a problem ... he always takes [the sign] from the set position with the ball in his hand, but in that situation he wasn't able to keep it dry," manager Trey Hillman said.
The Pirates also felt the rain was a factor, and not in their favor.
"The rain delay kind of killed the rally," Jack Wilson said. "Battling anybody's No. 1, especially the No. 1 guy in the big leagues, you've got to take advantage the one time they give you a chance and the door opens. I thought that door was cracking, but the next thing you know the floodgates come in. I thought it was pretty bad timing."
The Pirates had won four in a row since losing five in succession, but couldn't match their season's best five-game winning streak from May 16-20.
DeJesus broke out of an 0-for-12 slide with a solo homer, his sixth, to start the fourth. An inning later, Alberto Callaspo and Mark Teahen doubled and Teahen scored when first baseman Adam LaRoche's throw to the plate was late on DeJesus' grounder.
Greinke, making his first career start against Pittsburgh, allowed two runs or fewer for the 12th time in 16 games.
Morton, his third start for Pittsburgh pushed back two days by hamstring tightness, gave up three runs and seven hits in five innings.
"It was all right, mediocre, I guess," Morton said. "I got into some long counts and that hurt me."
Greinke was 0-2 with a 5.19 ERA in four starts after going 8-1 in his first 10, but it 2-0 with three earned runs allowed in 14 1/3 innings in his last two. He pitched eight innings while beating Houston 2-1 on Tuesday.
Ian Snell, the former Pirates' No. 2 starter who was demoted Thursday after deciding he needed a change of scenery, struck out 13 in a row after walking the leadoff batter Sunday for Triple-A Indianapolis against Toledo. He finished with 17 Ks and two hits allowed in seven innings, throwing 70 of 108 pitches for strikes. Indianapolis won 2-1 in 10 innings. ... Kansas City is 14-31 since May 8 and 9-29 when scoring three runs or fewer. ... Pirates C Ryan Doumit, out since April 20 with a broken right wrist, won't return until after the All-Star break. ... The Pirates, who took the first two games against Kansas City, haven't swept an interleague series since taking three from Cleveland in 2001.