Em php é de fácil solução ... mas em SQL ( talvez usando um storeprocedure ) se chegue lá.
A ideia é tendo um conjunto de datas , agrupar essas datas que estejam seguidas e/ou separadas por 1 dia.
Ou seja praticamente tenho as datas dos fins de semana, + datas dos feriados a ideia é agrupar essas datas em fins de semanas normais ou fins de semana prolongados:
2009-01-01
2009-01-02
2009-01-05
2009-01-06
2009-01-09
2009-01-10
2009-01-12
Grupo 1
Data Inicial -> 2009-01-01 , Data Final -> 2009-01-02
...
Grupo 2
Data Inicial -> 2009-01-09 , Data Final -> 2009-01-12