Match ends, Coventry City 3, Reading 2.
Leaders Reading fell to their first Championship defeat of the season as Coventry picked up their first league victory in seven attempts at St Andrew's.
Royals top scorer Lucas Joao uncharacteristically fluffed his lines when in on goal before Coventry led through Gustavo Hamer's classy side-footed finish from outside the area.
Portugal forward Joao held off a home defender to steer home a fine Reading leveller from 20 yards, but the Sky Blues went ahead again when Matt Godden pounced on a rebound moments after strike partner Max Biamou hit the bar with a golden chance inside the six-yard box.
Coventry extended their advantage with Sam McCallum's 30-yard strike - which beat an uncertain-looking Rafael in the Reading goal - and Veljko Paunovic's side left empty-handed despite George Puscas netting in stoppage time.
Reading's lead at the top will be cut to three points if unbeaten Bournemouth win at home to Derby on Saturday, while Coventry are out of the relegation zone and up to 17th.
The visitors had the better openings before falling behind, Fankaty Dabo's loose pass across his own box just out of reach of Royals' forward Sone Aluko, while Joao took a loose touch when bearing down on goal as his effort was smothered by Marko Marosi.
Midfielder Hamer's slick strike was Coventry's only shot on target in the first half, going through the legs of Reading defender Liam Moore on its way in.
After Joao scored for the fourth game running Mark Robins' hosts took charge, Biamou not able to keep a close-range shot down when it looked easier to score before Godden reacted fastest when Rafael parried Dabo's low strike to pick his spot.
Rafael was arguably at fault for Coventry's third - a speculative effort that perhaps moved through the air from McCallum, who had only come on minutes earlier.
Reading had the final say but Puscas' finish from Joao's overhit touch proved to be no more than a consolation, as they lost to the Sky Blues for the first time in 11 league meetings.
Coventry boss Mark Robins told BBC CWR:
"I think we've dealt with them pretty well and it was really important to get the three points for confidence.
"To win it the way we did, playing in the manner that we did, I thought was really good.
"We showed brilliant endeavour, commitment and some really good football was played - all three goals were outstanding."
Reading manager Veljko Paunovic told BBC Radio Berkshire:
"We never like losing and I think we had a good game, to be honest.
"We threatened, had the ball possession and created good half-opportunities but we just missed being a little more clinical.
"We felt good and comfortable in the first 45 minutes, thinking that we're going to win this game playing so well, but if you don't convert you have to think they'll at some point have their chance and they did."
- 1MarosiBooked at 87mins
- 4RoseBooked at 79mins
- 2ØstigardBooked at 38mins
- 15HyamBooked at 83mins
- 23DaboSubstituted forMcCallumat 82'minutes
- 38HamerBooked at 42minsSubstituted forO'Hareat 73'minutes
- 26ShipleySubstituted forAllenat 87'minutes
- 33Cabral Barbosa
- 2Pontes Esteves
- 6MooreSubstituted forMcIntyreat 80'minutes
- 7OliseSubstituted forPuscasat 80'minutes
- 18Lucas João
- David Webb
- Shots on Target
Second Half ends, Coventry City 3, Reading 2.
Foul by Lucas João (Reading).
Ben Sheaf (Coventry City) wins a free kick in the defensive half.
Offside, Coventry City. Ryan Giles tries a through ball, but Jamie Allen is caught offside.
Corner, Coventry City. Conceded by Tomás Esteves.
Goal! Coventry City 3, Reading 2. George Puscas (Reading) right footed shot from the left side of the six yard box to the centre of the goal. Assisted by Lucas João.
Attempt saved. Lucas João (Reading) left footed shot from the centre of the box is saved in the top left corner. Assisted by Tom McIntyre with a cross.
Attempt blocked. Alfa Semedo (Reading) right footed shot from outside the box is blocked.
Michael Morrison (Reading) wins a free kick in the attacking half.
Foul by Matt Godden (Coventry City).
Substitution, Coventry City. Jamie Allen replaces Jordan Shipley.
Marko Marosi (Coventry City) is shown the yellow card.
Goal! Coventry City 3, Reading 1. Sam McCallum (Coventry City) left footed shot from outside the box to the high centre of the goal. Assisted by Michael Rose.
Foul by Sone Aluko (Reading).
Ben Sheaf (Coventry City) wins a free kick in the attacking half.
Dominic Hyam (Coventry City) is shown the yellow card.
Andy Rinomhota (Reading) wins a free kick on the right wing.
Foul by Jordan Shipley (Coventry City).
Substitution, Coventry City. Sam McCallum replaces Fankaty Dabo.
- Rugby Union Weekly: The Premiership review, a Six Nations preview and Eddie Jones
- Americast: All you need to know as the US election day nears