Como ya te dije, no lo revisé completamente.
El tema es así:
- Tienes que buscar por separado los segmentos matutinos y por el otro los vespertinos. La consulta debe devolver las dos búsquedas unidas (de allí el UNION).
- En el matutino, debes tomar todos aquellos registros que se inicien entre la hora 00:00:00 de cada día y las 08:00:00 de ese mismo día. Con esto se debe calcular el tiempo entre la hora marcada de entrada y las 08:00:00:
Esta parte:
"crea" un datetime con la misma fecha del inicio, pero hasta las 08:00:00.
- Debe agregarse siempre el ID del empleado para poder realizar luego el agrupamiento. No hay que olvidar que una consulta pasada en el resultado de una subconsulta sólo puede invocar los campos que la subconsulta devuelve.
- El período vespertino se calcula de una forma parecida, pero con la diferencia entre las 20:00:00 y la hora registrada de salida:
¿Se entiende?