Respuesta: Calcular horas trabajadas nocturnas MySQL Zerts,
esta consulta hace, creo, lo que quieres, y te devuelve el resultado en horas. La he hecho con varios If, aunque seguro que con case when quedaría más elegante. No osbtante, creo que funciona, aunque te diré que pongo la confianza en los datos que tú das, que por cierto no sé cómo generas. Yo hubiera hecho las cosas de otro modo y hubiera evitado muchas de estas operaciones. He puesto como nombre de tabla tabla. Ahí va:
SELECT cast(concat(DiaTRa,' ',HorIni) as datetime) inicio, DATE_ADD(cast(concat(DiaTRa,' ',HorIni) as datetime), INTERVAL HOUR(HorTra) hour ) fin, addtime(addtime(addtime(addtime(addtime(If (DATE_ADD(cast(concat(DiaTRa,' ',HorIni) as datetime), INTERVAL HOUR(HorTra) hour ) < DATE_ADD(CAST(CONCAT(DiaTra,' 00:00:00')as datetime), INTERVAL 1 DAY) AND HorFin < '18:00:00','00:00:00','00:00:00'), If (DATE_ADD(cast(concat(DiaTRa,' ',HorIni) as datetime), INTERVAL HOUR(HorTra) hour ) < DATE_ADD(CAST(CONCAT(DiaTra,' 00:00:00')as datetime), INTERVAL 1 DAY) AND HorIni < '18:00:00' AND Horfin > '18:00:00',TIMEDIFF(HorFin,'18:00:00'),'00:00:00') ), If (DATE_ADD(cast(concat(DiaTRa,' ',HorIni) as datetime), INTERVAL HOUR(HorTra) hour ) < DATE_ADD(CAST(CONCAT(DiaTra,' 00:00:00')as datetime), INTERVAL 1 DAY) AND HorIni > '18:00:00' AND Horfin > '18:00:00',TIMEDIFF(HorFin,HorIni),'00:00:00')), If (DATE_ADD(cast(concat(DiaTRa,' ',HorIni) as datetime), INTERVAL HOUR(HorTra) hour ) > DATE_ADD(CAST(CONCAT(DiaTra,' 00:00:00')as datetime), INTERVAL 1 DAY) AND HorIni < '18:00:00',TIMEDIFF('24:00:00', '18:00:00'),'00:00:00')), If (DATE_ADD(cast(concat(DiaTRa,' ',HorIni) as datetime), INTERVAL HOUR(HorTra) hour ) > DATE_ADD(CAST(CONCAT(DiaTra,' 00:00:00')as datetime), INTERVAL 1 DAY) AND HorIni > '18:00:00',TIMEDIFF('24:00:00', HorIni),'00:00:00')), If (DATE_ADD(cast(concat(DiaTRa,' ',HorIni) as datetime), INTERVAL HOUR(HorTra) hour ) > DATE_ADD(CAST(CONCAT(DiaTra,' 00:00:00')as datetime), INTERVAL 1 DAY),IF (HorFin >'06:00:00', '06:00:00',HorFin), '00:00:00'))noc FROM `tabla` |