SAN FRANCISCO (AP) -- Paul Goldschmidt hit a sacrifice fly and a double against All-Star Madison Bumgarner, Cody Ross added a late two-run single, and the first-place Arizona Diamondbacks held off a late rally by the San Francisco Giants for a 3-1 win Sunday to avoid a three-game sweep.
The D-backs snapped a three-game losing streak with their first victory of the second half.
Randall Delgado (2-3) won in his first career start at AT&T Park, and Goldschmidt's first-inning sac fly got things going against the inconsistent defending World Series champions. Arizona threw out Buster Posey at the plate in the sixth.
A day after stranding 13 baserunners and going 2 for 12 with runners in scoring position, the D-backs did just enough against Bumgarner in the 10-game winner's first outing after the All-Star break.
Ross singled in the eighth as Arizona won for just the fourth time in 16 road games.
The D-backs bounced back in the series finale to avoid their second sweep of the season against the Giants and first in San Francisco's waterfront ballpark since May 10-12, 2011.
Goldschmidt, 1-9 in the first two games of the series, doubled to start the fourth and drew walks in the sixth and eighth innings. Delgado allowed three hits, struck out two and walked four in 5 2-3 innings.
Brad Ziegler finished a crazy ninth that featured two errors for his fourth save in as many tries. The Giants scored on second baseman Aaron Hill's wild throw past first.
San Francisco took the first two games of the series, but the NL West-leading Diamondbacks (51-17) gained a game back to give themselves a 5 1/2-game cushion over San Francisco and remain a half-game ahead of second-place Los Angeles.
Bumgarner (10-6), who didn't pitch for NL All-Star manager Bruce Bochy in Tuesday's loss at Citi Field, had his three-start winning streak snapped with just his second loss in eight starts. He allowed five hits, struck out six and walked three over seven innings in his 20th start of 2013.
The Giants turned a nifty double play to end the fifth. First baseman Brandon Belt caught A.J. Pollock's foul popup and threw to Bumgarner covering first for a double play. A running Cliff Pennington, aboard on a leadoff single, was faked out at second when Marco Scutaro threw down his glove as if to tag Pennington - with Pennington realizing too late that the ball wasn't there as he made his slide.
Arizona was swept in a three-game series the previous two times it opened the second half on the road, at Wrigley Field against the Cubs last year and at San Diego in 2010.
Notes: SS Brandon Crawford returned to the Giants' starting lineup after coming off the bench Saturday, a day after he had his left foot spiked by Heath Bell on a play at first base. ... Bumgarner lost for just the third time in 13 starts vs. the NL West. ... On Aug. 16, 2011, against the Giants in his second big league start while with Atlanta, Delgado carried a no-hitter into the seventh inning before now-Arizona teammate Ross' solo home run. ... The Giants placed LHP Jeremy Affeldt on the 15-day DL a day after he strained his left groin. He could miss up to six weeks. RHP Jean Machi was recalled from Triple-A Fresno to fill his spot. ... San Francisco RHP Ryan Vogelsong, recovering from two broken bones in his right pinkie, will pitch his first rehab outing in the Arizona Rookie League on Tuesday - likely two innings and about 35 pitches. ... The Giants used 16 relievers in the series.