Bayer Leverkusen kept up their pursuit of Bundesliga leaders Bayern Munich, reducing the deficit to nine points with a 3-0 home win over Hamburg.
Two goals from the league's top scorer Stefan Kiessling and one from Andre Schurrle earned the side coached by Sami Hyypia and Sascha Lewandowski all three points.
The win guaranteed Leverkusen second spot going into 2013 - albeit some distance behind Bayern Munich, who drew 1-1 at home to Borussia Monchengladbach on Friday.
Eintracht Frankfurt ended the year on a high note, toppling Wolfsburg 2-0 at the VW-Arena to move into third place going into the winter break.
A five-minute spell in the first half decided the game in Frankfurt's favour, with Alexander Meier putting them in front before Josue was sent off and Takashi Inui added a second.
Schalke's poor recent form continued as they ended the year with a 3-1 defeat at home to Freiburg, extending their winless run to six matches and increasing the pressure on under-fire coach Huub Stevens.
Despite taking the lead through Jefferson Farfan in the 20th minute, the Royal Blues fell to two goals from Jan Rosenthal and an Oliver Schmid effort as Freiburg moved above them in the end-of-year standings.
Rosenthal and Schalke striker Klaas Jan Huntelaar were both sent off in the final 10 minutes but there were no further goals, meaning Freiburg climbed to fifth and Schalke slipped to seventh.
Mainz came from behind to beat Stuttgart 3-1 at the Coface Arena to move above their opponents and into the top six.
Martin Harnik was credited with Stuttgart's opening goal, although Mainz goalkeeper Heinz Muller helped turn the forward's header into his own net in the 48th minute.
The home side responded well with a brace from Nicolai Muller before Elkin Soto wrapped up victory with the last kick of the game.
A delightful free-kick from Ken Ilso earned Fortuna Dusseldorf a 2-1 home win over Hannover which lifted Norbert Meier's men nine points clear of the drop zone.
Dani Schahin gave the hosts the lead before half-time, but Mame Diouf brought the Reds level in the 69th minute. The game could then have gone either way before Ilso stepped up to curl in a 25-yard free-kick in the 83rd minute to send the 48,000 fans in the Dusseldorf Arena wild with joy.
Finally, the Bavarian derby between Greuther Furth and Augsburg ended 1-1 and with both sides a man down, as the hosts missed their last chance to pick up a home Bundesliga victory in 2012.
Augsburg went in front in the ninth minute through Sascha Molders, but Lasse Sobiech levelled for Mike Buskens' side.
Furth captain Mergim Mavraj was then sent off, with Giovanni Sio following him for an early bath towards the end of a combative relegation battle which left both sides still staring the drop in the face.