"The difference in this game was Aldridge, Aldridge and Aldridge," Pistons coach John Kuester said. "When they needed something else, they ran a play for LaMarcus Aldridge."
Aldridge went 12 of 17 from the floor and hit all but one of his 13 free-throw attempts.
"I think he's an All-Star," said Wesley Matthews, who added 24 points for Portland. "He's an All-Star 10 times out of 10. He makes shots. That's what he does."
Detroit's Will Bynum wasn't pleased with his team's defensive plan against Aldridge.
"He just killed us on the pick-and-roll," he said. "I think the details needed to be better there. The way we were defending it, he was just wide open."
Andre Miller finished with 15 points and 12 assists for Portland, which has won six straight over the Pistons.
"We had a lot of turnovers tonight, but we found a way to pull it out," Miller said. "They got into a rhythm late and found a couple go-to players, but we were able to finish it off."
Ben Gordon scored 18 points and Tracy McGrady had 16 for the Pistons. Detroit's bench outscored its starters 57-43.
"Our second unit played with a great sense of urgency," Kuester said. "Tracy did some good things for us, but we needed the rest of the first group to play with that kind of urgency."
The Blazers took a 66-60 lead by running at every opportunity in the third quarter, but missed a chance to widen the gap when Nicolas Batum threw away a pass on a 4-on-1 break.
"We got caught up in their tempo, and we were walking the ball up the floor most of the game," Portland coach Nate McMillan said. "When we did get out and run the floor, we were able to get some easy baskets."
Aldridge finished with 14 points in the quarter, but the Pistons scored the final nine to get back into the game. Portland led 74-70 going into the fourth, and Patrick Mills scored the first five points of the quarter.
Austin Daye's four-point play started a Pistons rally, and they took an 83-82 lead on Bynum's jumper with 7:36 left. Miller's put-back gave the Blazers an 86-84 advantage with 5:32 left, and he added a free throw after Kuester was called for a technical on the play.
Kuester stayed with his reserves throughout the fourth quarter, and it paid off when two straight Bynum steals led to a 95-93 lead with 1:48 to play.
"They were the ones that had gotten us back into the game," Kuester said. "They were taking the ball to the basket, and I thought Will and Ben did a great job of attacking."
Chris Wilcox, though, made several key mistakes in the last 90 seconds. He committed two shooting fouls and a three-second violation, then missed a potential tying free throw with 54 seconds left.
Daye missed a contested tying 3-pointer with 23 seconds left on a blown play. Kuester wanted Gordon to take a two-pointer, but didn't give the players a clear second option.
"The play was for Ben, but he got caught on a screen," Daye said. "We only talked about the play for the last five seconds of the timeout, so there was some confusion."
Detroit guard Richard Hamilton, who has played just once since Jan. 10, missed his fourth straight game with a groin injury. ... Blazers guard Brandon Roy (knee) did color commentary on Portland's TV broadcast for part of the first half. ... The fourth quarter featured a jump ball between two of the league's shortest players, Mills and Bynum. Both are generously listed as 6-feet tall.