Valtteri Bottas won the Austrian Grand Prix for Mercedes in a thrilling finish ahead of Sebastian Vettel of Ferrari. Daniel Ricciardo was third.
Bottas, who led from pole, was cleared of making a jump start in a stewards' investigation and took the chequered flag just ahead of German Vettel.
It was the Finn’s second win of the season following his triumph at the Russian Grand Prix, his maiden career victory.
Briton Hamilton, Bottas's team mate, started in eighth place after a grid penalty triggered by an unscheduled gearbox change and finished fourth.
Championship leader Vettel has 171 points after nine of 20 races, with Hamilton on 151.
For Ricciardo, on his team's 'home' Red Bull Ring circuit, it was a fifth consecutive podium finish and the 22nd of his career.
Bottas got off to a fast start and was investigated by stewards - but cleared - for possibly jumping the lights.
He managed to fend off Vettel who had closed right behind in a cliffhanger last lap.
"I had a bit of deja-vu in the end from Russia, Vettel was catching up but the problem was I had a massive (tyre) blister," Bottas said on the podium.
"At the beginning I could control the race but it was trickier towards the end. I'm really happy, it's only the second win in my career."
Vettel said: "As soon as we put on the super-soft tyre the car came alive. I think I needed one more lap because Bottas was really struggling to get up the hill."
Red Bull's Max Verstappen and McLaren's Fernando Alonso retired after a first-turn collision involving Toro Rosso's Daniil Kvyat, the latter receiving a drive-through penalty.
It was a fifth retirement in seven races for Verstappen, to the disappointment of thousands of orange-clad Dutch fans at Spielberg.
The action as it happened: