Bath climbed into the Premiership top four for the first time this season as they powered their way to victory at rain-lashed, windswept Worcester.
After tries from visiting forwards Zach Mercer, skipper Francois Louw and Josh McNally, Bath failed with a late bid for a try bonus point.
But they could have lost it when Chris Pennell's penalty drifted just wide.
Cornell du Preez scored Warriors' first-half try before winger Nick David added another.
David's try came in the left corner on his Premiership debut, with 12 minutes still to go.
But Duncan Weir was off target from the touchline, before Pennell then just missed from around 55 metres with an added-time penalty - the last kick of the game.
Scotland stand-off Weir was successful with only four kicks at goal from nine attempts - admittedly on a day very much not made for kickers.
Battening down the hatches
Storm Dennis was already settling in long before kick-off at Sixways and, although playing on an all-weather surface ensured that the game would at least go ahead, it was always likely that the wind and rain would play a big part.
As it was, aside from the difficulties facing the kickers, both handled the increasingly extreme weather conditions well in what proved a far more entertaining contest than expected.
And it was Bath who made the storming start when number eight Mercer went over inside 90 seconds.
Rhys Priestland converted, then added a penalty after Weir had kicked the second of his two penalty attempts. And when Du Preez bullocked his way over and Weir converted, it was 10-10 after 13 minutes.
Weir's second penalty gave Worcester a 13-10 half-time lead, although Bath prop Beno Obano was so close just before the break when he knocked on as he tried to snake out an arm to touch down.
After Weir's next penalty attempt was visibly thwarted by the wind, Warriors hoped to have the advantage of the elements at their back after the break, but instead it was Bath who took over the contest.
Graham Kitchener seemed unfortunate to be sent to the bin for knocking the ball out of Bath scrum-half Will Chudley's grip, but Bath quickly cashed in on numbers when Louw went over.
And, after Priestland added the extras and Weir missed another penalty, Bath extended their lead to two scores.
McNally finally ended a 10-minute bout of sustained pressure to score in the right corner.
Priestland missed the kick, the day's only off-target effort by the former Wales stand-off, but that 22-13 lead then got whittled, first by Weir's penalty from 45 yards.
Weir then missed another penalty shot before David went in at the corner.
But Weir missed the tough touchline kick and Pennell failed with that even tougher long shot - and that meant Warriors, also beaten narrowly by Wasps going into the three-week break, having to settle for a losing bonus-point defeat for the second home game running.
Worcester director of rugby Alan Solomons told BBC Sport:
"In fairness to the kickers, the conditions were very difficult. The wind was swirling like crazy.
"Chris Pennell has done it before. He has had a big kick here to win us the game and he obviously had the confidence to think he could win us this game too.
"We'd had a kick to touch just before and given away a penalty, so it was understandable that the players decided, rather than risk that again, they'd have a shot at goal.
"The margins are fine in the Premiership and, at the moment, we are just falling on the wrong line of those margins. But, if you keep at it, eventually the wheel will turn."
Bath boss Stuart Hooper on Zach Mercer:
"I thought he was exceptional. He didn't just get through the 80 minutes, I thought he was consistently dominant with his ball-carry, and he was consistent in his collision-dominance.
"He has worked unbelievably hard. I know people always say that, but he has been out for three months, so for him to come back on a very fast surface and get through 80 minutes is a credit to him and the work he has put in."
Worcester: Pennell; Van Breda, Lawrence, Venter, David; Weir, Hougaard; Waller, Moulds (capt), Schonert, Brelser, Kitchener, Hill, Mama, Du Preez
Replacements: Taufete'e, Bower, Palframan, Kitchener, Lewis, Heaney, Lance, Mills
Bath: Homer; Rokoduguni, Willison, Matavesi, McConnochie; Priestland, Chudley; Obano, Dunn, Judge, McNally, Stooke, Ellis, Louw (capt), Mercer
Replacements: Walker, Boyce, Nixon, Williams, Faletau, Cook, Burns, Wright
Referee: Christophe Ridley