Que tal elyuvic.
Bastante claro tu caso, pero no nos dices con exactitud cual es tu duda.
Porque no haces algún avance y con gusto te ayudaremos, el caso no se ve díficil, solo bastante laborioso ( "talachudo" como decimos en mex-df).
Algunos tips:
1.- Crea una sola lista de fechas:
Código:
SELECT Persona, Fecha_Inicio AS Fecha
FROM Agenda
UNION ALL
SELECT Persona, Fecha_Fin as Fecha
FROM Agenda
2.- Recorres la lista anterior de dos en dos registros. De esta manera dos registros te daran un rango "ocupado", y dos registros consecutivos será un rango "desocupado".
Por ejemplo:
1.-01/01/2007
2.-01/05/2007
3.-01/09/2007
4.-01/10/2007
Los registros 1 y 2 te dan el rango "ocupado" y los registros 2 y 3 te dan un rago "desocupado".
Saludos!!