8
I have a query where I have an example that gives the correct result and the other one does not when converting minutes to hours.
1st example in minutes:
SELECT A.Colaborador,
SUM(A.`Horas Consumidas`) AS `Total Horas`
FROM
(SELECT centrodb.utentes.codigoutente,
centrodb.utentes.nome,
centrodb.utentes.descricaovalencia,
centrodb.registoFisioterapia.`DataRegisto`,
centrodb.registoFisioterapia.`Data`,
Inicio,
Fim,
centrodb.colaboradores.Nome AS Colaborador,
TIME_TO_SEC(TimeDiff(TIME_FORMAT(Fim,'%H:%i'), TIME_FORMAT(Inicio,'%H:%i')))/60 AS `Horas Consumidas`
FROM centrodb.registoFisioterapia LEFT OUTER JOIN centrodb.utentes
ON centrodb.utentes.Id = centrodb.registoFisioterapia.utente
LEFT OUTER JOIN colaboradores
ON centrodb.colaboradores.codigo = centrodb.registoFisioterapia.Nome
where centrodb.registoFisioterapia.`Data` between '2018-04-26' And '2018-05-8' AND centrodb.colaboradores.Nome = 'TÂNIA LOPES') AS A
GROUP BY A.Colaborador
Result: 1650 minuots
1st example converted to hours:
SELECT A.Colaborador,
TIME_FORMAT(SEC_TO_TIME(SUM(A.`Horas Consumidas`)),'%i:%s') AS `Total Horas`
FROM
(SELECT centrodb.utentes.codigoutente,
centrodb.utentes.nome,
centrodb.utentes.descricaovalencia,
centrodb.registoFisioterapia.`DataRegisto`,
centrodb.registoFisioterapia.`Data`,
Inicio,
Fim,
centrodb.colaboradores.Nome AS Colaborador,
TIME_TO_SEC(TimeDiff(TIME_FORMAT(Fim,'%H:%i'), TIME_FORMAT(Inicio,'%H:%i')))/60 AS `Horas Consumidas`
FROM centrodb.registoFisioterapia LEFT OUTER JOIN centrodb.utentes
ON centrodb.utentes.Id = centrodb.registoFisioterapia.utente
LEFT OUTER JOIN colaboradores
ON centrodb.colaboradores.codigo = centrodb.registoFisioterapia.Nome
where centrodb.registoFisioterapia.`Data` between '2018-04-26' And '2018-05-8' AND centrodb.colaboradores.Nome = 'TÂNIA LOPES') AS A
GROUP BY A.Colaborador
Result: 27:30
2nd example in minutes where the wrong time is:
SELECT A.Colaborador,
SUM(A.`Horas Consumidas`) AS `Total Horas`
FROM
(SELECT centrodb.utentes.codigoutente,
centrodb.utentes.nome,
centrodb.utentes.descricaovalencia,
centrodb.registoFisioterapia.`DataRegisto`,
centrodb.registoFisioterapia.`Data`,
Inicio,
Fim,
centrodb.colaboradores.Nome AS Colaborador,
TIME_TO_SEC(TimeDiff(TIME_FORMAT(Fim,'%H:%i'), TIME_FORMAT(Inicio,'%H:%i')))/60 AS `Horas Consumidas`
FROM centrodb.registoFisioterapia LEFT OUTER JOIN centrodb.utentes
ON centrodb.utentes.Id = centrodb.registoFisioterapia.utente
LEFT OUTER JOIN colaboradores
ON centrodb.colaboradores.codigo = centrodb.registoFisioterapia.Nome
where centrodb.registoFisioterapia.`Data` between '2018-03-26' And '2018-04-25' AND centrodb.colaboradores.Nome = 'TÂNIA LOPES') AS A
GROUP BY A.Colaborador
Result: 3840 minutes
2nd example converted to hours:
SELECT A.Colaborador,
TIME_FORMAT(SEC_TO_TIME(SUM(A.`Horas Consumidas`)),'%i:%s') AS `Total Horas`
FROM
(SELECT centrodb.utentes.codigoutente,
centrodb.utentes.nome,
centrodb.utentes.descricaovalencia,
centrodb.registoFisioterapia.`DataRegisto`,
centrodb.registoFisioterapia.`Data`,
Inicio,
Fim,
centrodb.colaboradores.Nome AS Colaborador,
TIME_TO_SEC(TimeDiff(TIME_FORMAT(Fim,'%H:%i'), TIME_FORMAT(Inicio,'%H:%i')))/60 AS `Horas Consumidas`
FROM centrodb.registoFisioterapia LEFT OUTER JOIN centrodb.utentes
ON centrodb.utentes.Id = centrodb.registoFisioterapia.utente
LEFT OUTER JOIN colaboradores
ON centrodb.colaboradores.codigo = centrodb.registoFisioterapia.Nome
where centrodb.registoFisioterapia.`Data` between '2018-03-26' And '2018-04-25' AND centrodb.colaboradores.Nome = 'TÂNIA LOPES') AS A
GROUP BY A.Colaborador
Result: 04:00, but should result 64:00.
Can someone help me solve this problem?
I only have a problem showing the result, show it this way:
64h 0.0000m
and should show:64:00
– Bruno
@Beginner, you can try CONCAT(FLOOR(Total_minutos_consumed/60),':',MOD(Total_minutos_consumed,60),'0')
– bruno
Even so, in minutes it’s like this:
64:0.00000
– Bruno
And if not convert inside to minutes, just add the seconds, and do only SEC_TO_TIME(Total_minutes consumed) abroad?
– bruno
You’re saying it like that:
CONCAT(FLOOR(SEC_TO_TIME(Total_Minutos_Consumidos/60)),':',MOD(SEC_TO_TIME(Total_Minutos_Consumidos,60),'0'))
– Bruno
I edited the answer. The idea is to never convert to minutes and outdoors, only use once SEC_TO_TIME
– bruno