Hola he tenido un problema similar, se tomó un tiempo para pensar y aquí es mi solución, he tenido la tabla con suscripciones de usuarios, hay una hora de inicio y una hora de cierre tristes, mi problema era un poco más complejo, básicamente se reducía a esto:
SELECT subscription_id, time_open, time_closed, TIMESTAMPDIFF(DAY,time_open,time_closed) AS Day,
HOUR(sec_to_time(TIMESTAMPDIFF(SECOND,ADDDATE(`time_open`, INTERVAL TIMESTAMPDIFF(DAY,time_open,time_closed) DAY),`time_closed`))) AS Hour,
MINUTE(sec_to_time(TIMESTAMPDIFF(SECOND,ADDDATE(`time_open`, INTERVAL TIMESTAMPDIFF(DAY,time_open,time_closed) DAY),`time_closed`))) AS Minute,
SECOND(sec_to_time(TIMESTAMPDIFF(SECOND,ADDDATE(`time_open`, INTERVAL TIMESTAMPDIFF(DAY,time_open,time_closed) DAY),`time_closed`))) AS Second
FROM `user_subscription`
Así que, básicamente, lo que hace esta consulta es que calcula los días deduciendo las fechas en la primera línea. Luego agrega el número de días completos a la hora de inicio y reduce el tiempo de cierre a la suma, por lo que lo que queda es el tiempo en el día actual. Después de eso, solo selecciona Horas, minutos y segundos a partir de eso. Si lo quiere todo junto, puede concatenar las cadenas, pero de esta forma puede usarlo más, a diferencia de las cadenas.
¿Qué estás usando? sql-server, oracel, mysql – Arion
¿Qué RDBMS y qué has probado? – Rahul
Obtuvo 26k visitas y una insignia de oro para esto: | – OGHaza