Soren Kragh Andersen claimed his second win of the Tour de France with another shrewd late solo attack on stage 19.
Team Sunweb’s Andersen, 26, attacked from a break 16km out and powered to the line in Champagnole, 53 seconds ahead of Luka Mezgec in second.
Ireland’s Sam Bennett won his duel with Peter Sagan and looks set to take the green jersey, leading by 55 points with two stages remaining.
Primoz Roglic comfortably retained his 57-second lead in the yellow jersey.
The Slovenian will win his first Tour title should he remain in the lead following Saturday’s mountain time trial, with tradition dictating the yellow jersey is not attacked on the final, processional stage into Paris on Sunday.
Having won stage 14 with a similar solo move, Kragh Andersen is the fourth rider in this year’s Tour to win two stages after Wout van Aert, Caleb Ewan and Tadej Pogacar, who remains second overall.
The Dane never looked back after kicking away from an elite 12-man group that included Bennett and Sagan, only letting up inside the final kilometre after screaming at a TV motorbike for a time check to ensure his lead was insurmountable.
“I have to say that, in the last kilometres, I was screaming in pure disbelief,” he said.
“I’ve got two stage wins on the same Tour de France – it’s incredible. I’m speechless.
“I was in the mix with some of the best riders of the world for this type of race and I honestly didn’t know how to beat them as I was on my limit too.
“But then I realised that, if I managed somehow to get a small gap, it may enable me to pull it off and that’s exactly what happened. This is a memory I will carry in my mind for the rest of my life.”
It was another impressive tactical display by Sunweb, who have now won three stages in this Tour.
After the breakaway was caught at 35km to go, the German team initially tried to keep the race together for their sprinter Cees Bol by using Kragh Andersen and Nikias Arndt to mark any attacks.
But once it became clear the peloton would not catch the lead group, they adjusted superbly, with Kragh Andersen catching out and riding away from fine one-day riders such as Greg van Avermaet, Oliver Naesen and Sagan.
The group could not get organised behind and when Britain’s Luke Rowe launched a late counter-attack, it was already in vain, with the Ineos Grenadiers rider eventually coming home seventh.
Bennett appeared content to mark record, seven-time green jersey winner Sagan instead of chasing his second stage win of the race.
The Deceuninck-Quick-Step rider beat the Slovak at both the intermediate sprint and at the finish to add three points to his lead in the points classification.
There are a maximum of 90 points on offer remaining in the race, although it is highly unlikely Sagan or Bennett will take any points in Saturday’s time trial by finishing in the top 15 on the stage.
That leaves 70 points on the final stage and even if Sagan were to win maximum points, Bennett just needs to collect 16 – the equivalent of finishing fifth on the stage – to ensure he becomes only the second Irishman after Sean Kelly to win the green jersey.
Stage 19 result
1. Soren Kragh Andersen (Den/Team Sunweb) 5hrs 36mins 33secs
2. Luka Mezgec (Slo/Mitchelton-Scott) +53secs
3. Jasper Stuyven (Bel/Trek-Segafredo) Same time
4. Greg van Avermaet (Bel/CCC Team)
5. Oliver Naesen (Bel/AG2R La Mondiale)
6. Nikias Arndt (Ger/Team Sunweb)
7. Luke Rowe (GB/Ineos Grenadiers) +59secs
8. Sam Bennett (Ire/Deceuninck-Quick-Step) +1min 02secs
9. Peter Sagan (Svk/Bora-Hansgrohe) Same time
10. Matteo Trentin (Ita/CCC Team)
General classification after stage 19
1. Primoz Roglic (Slo/Jumbo-Visma) 83hrs 29mins 41secs
2. Tadej Pogacar (Slo/UAE Team Emirates) +57secs
3. Miguel Angel Lopez (Col/Astana) +1mins 27secs
4. Richie Porte (Aus/Trek-Segafredo) +3mins 06secs
5. Mikel Landa (Spa/Bahrain McLaren) +3mins 28secs
6. Enric Mas (Spa/Movistar) +4mins 19secs
7. Adam Yates (GB/Mitchelton-Scott) +5mins 55secs
8. Rigoberto Uran (Col/EF Pro Cycling) +6mins 05secs
9. Tom Dumoulin (Ned/Jumbo-Visma) +7mins 24secs
10. Alejandro Valverde (Spa/Movistar) +12mins 12secs