
No desesperes. Deberías ver las bases de datos que crearon los ingenieros de la empresa en la que trabajo antes de que yo entrara... El "peor escenario posible" que mencionaban mis profesores se quedó muy corto.
Como sea, explico el detalle de lo que hace lo que te puse. En ambos casos el esquema es el mismo:
- DATE() "corta" el datetime y devuelve la fecha.
- ADDTIME(fecha, hora) devuelve un DATETIME que combina la fecha y la hora dadas.
- MAX() devuelve un único dato (el máximo), por lo que haciendo un JOIN con la otra subconsulta todo develve sólo los dos valores: la fecha y hora máximas y la mínima, que es lo que usas luego para el TIMEDIFF().
Teóricamente, lo que te puse debería devolver lo mismo que todo lo que posteaste tu.
¿Lo has probado?