Freeland (6-14) allowed two runs and six hits over six innings. He walked three and struck out two while beating Arizona for the first time in three 2023 starts.
Brenton Doyle and Brendan Rodgers each had two hits for Colorado (51-87). Charlie Blackmon scored a run and drove in another as the Rockies improved to 3-9 against Arizona this season. The final meeting is Wednesday.
The setback dropped the Diamondbacks (71-68) one game behind the Cincinnati Reds in the battle for the National League's third wild-card spot. The Miami Marlins are a half-game ahead of Arizona.
Matt Koch, Jake Bird and Tyler Kinley each pitched a scoreless inning of relief. Kinley needed just eight pitches to retire the side in the ninth to record his second save of the season.
The victory was just the third in the past 15 games for Colorado.
Ketel Marte and Christian Walker each had two hits for the Diamondbacks, who were 1-for-6 with runners in scoring position.
Arizona's Brandon Pfaadt (1-8) allowed three runs and six hits over 3 2/3 innings. He struck out four and walked two.
Nolan Jones hit an RBI double in the first to give Colorado a 1-0 lead.
Arizona tied the score in the bottom of the inning when Marte tripled and scored on Emmanuel Rivera's single.
Ezequiel Tovar manufactured a run in the Colorado third after leading off with a single. After stealing second, he stole third as Jones walked with Diamondbacks catcher Gabriel Moreno making a wide throw that allowed Tovar to score.
The Rockies pushed the lead to 3-1 in the fourth as Doyle led off with a triple and Blackmon followed with a sacrifice fly.
Arizona moved within one in the fifth as Walker singled, moved to third on a one-out double by Lourdes Gurriel Jr. and scored on Corbin Carroll's sacrifice fly.
—Field Level Media