SQL Server encuentra dateiff entre diferentes filas, suma

Estoy tratando de crear una consulta que analice los datos en nuestro sistema de seguimiento de tiempo. Cada vez que un usuario entra o sale, hace una fila que registra el tiempo de deslizamiento y el sitio de encendido o apagado (entrada o salida). En el caso del usuario 'Joe Bloggs', hay 4 filas, que quiero emparejar y calcular el tiempo total pasado en el sitio para Joe Bloggs.

El problema es que hay registros que no son tan fáciles de emparejar. En el ejemplo dado, el segundo usuario tiene dos 'on' consecutivos, y necesito encontrar un método para ignorar las filas repetidas 'on' u 'off'.

ID  | Time                    |OnOffSite| UserName   
------------------------------------------------------
123 | 2011-10-25 09:00:00.000 | on      | Bloggs Joe |
124 | 2011-10-25 12:00:00.000 | off     | Bloggs Joe |
125 | 2011-10-25 13:00:00.000 | on      | Bloggs Joe |
126 | 2011-10-25 17:00:00.000 | off     | Bloggs Joe |
127 | 2011-10-25 09:00:00.000 | on      | Jonesy Ian |
128 | 2011-10-25 10:00:00.000 | on      | Jonesy Ian |
129 | 2011-10-25 11:00:00.000 | off     | Jonesy Ian |
130 | 2011-10-25 12:00:00.000 | on      | Jonesy Ian |
131 | 2011-10-25 15:00:00.000 | off     | Jonesy Ian |

Mi sistema es MS SQL 2005. El período de informe para la consulta es mensual.

¿Puede alguien sugerir una solución? mis datos ya están agrupados en una tabla por nombre de usuario y hora, y el campo ID es Identity.

Respuestas a la pregunta(2)

Su respuesta a la pregunta