MySQL - suma y difererencia de horas

 
Vista:

suma y difererencia de horas

Publicado por jose (7 intervenciones) el 17/03/2009 20:02:45
Estimados, estoy armando una consulta en mysql para hallar la cantidad de hs trabajas por x actividad en x mes...

y he realizado la sgte: consulta , pero me parece extraño que las hs trabajdas no me esta saliendo como debierra , esto si miro hs de inicio y fin de la tarea...que estoy haciendo mal...???
y otro es como puedo hacer para sumar el total de hs trabajadas en formato H:MM:SS

muchas, gracias por su tiempo...

saludos, jose

************************************************************

SELECT DATE(FECH)AS FECHA,DATE_FORMAT(INICIO,'%H:%I'),DATE_FORMAT(FIN,'%H:%I') ,TIME_FORMAT(INICIO-FIN,'%H:%I:%S')AS HS_TRAB FROM MOVIMIENTOS

WHERE YEAR( FECH)=2009 AND MONTH(FECH)= 3 AND IDACTIVIDAD=16;

FECHA INICIO FIN HS:TRAB
"2009-03-10" "16:04" "17:05" "01:01:00"
"2009-03-13" "16:04" "17:05" "01:01:00"
"2009-03-15" "08:08" "09:09" "01:01:00"
"2009-03-17" "08:08" "09:09" "01:01:00"
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:suma y difererencia de horas

Publicado por Emiliano (98 intervenciones) el 17/03/2009 20:52:37
Yo en tu caso en ves de utilizar el campo de horas como DATETIME lo utilizaria como timestamp, en Mysql seria uncampo del tipo INT.

Timestamp es el número de segundos que han transcurrido desde las 0 horas del 1 de enero de 1970 GMT. Eso quiere decir que timestamp es una medida en segundos.

Por ende si tenes dos fechas basta tan solo restar

(Hora Fin- Hora Inicio) * 60, ademas tambien es facil hacer la suma ponele

SELECT SUM(Hora Fin - Hora Inicio) WHERE usuario='pepe';

En Mysql tenes dos funciones que te convierten de timestamp a formato DATETIME y viseversa,

mysql> SELECT FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> SELECT FROM_UNIXTIME(875996580) + 0;
-> 19971004222300

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580

----------------------------------------------------------------------------------------------------------
En tu caso si tuvieras las fechas como timestamp seria

SELECT (SUM(FIN - INICIO)/60) as suma ,FROM_UNIXTIME(INICIO,'%H:%I'),FROM_UNIXTIME(FIN,'%H:%I') ,FROM MOVIMIENTOS
WHERE YEAR(FROM_UNIXTIME(INICIO))=2009 AND MONTH(FROM_UNIXTIME(FIN))= 3 AND IDACTIVIDAD=16;

Lo buena es que a la suma te la da en segundos y vos podes convertirasl a horas , minutos , segundos

Al principio cuesta entender pero despues es muy util.

Suerte espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:suma y difererencia de horas

Publicado por jose (7 intervenciones) el 17/03/2009 21:01:23
Gracias, Maestro...se nota que le dedicas tiempo a responder y lo haces bien....

si yo recine empieso con este tema..asi que gracias por la orientacion..

saludos,jose
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:suma y difererencia de horas

Publicado por luis (1 intervención) el 08/04/2011 18:47:04
antes que nada saludos a todos.

Yo busco exactamente lo mismo, solo que necesito sumar las horas acumuladas por cada trabajador en la semana, es decir de la fecha de lunes a la fecha del viernes para que me muestre el total de horas acumuladas.

solo que en este caso para la función SUM() los valores son mas de uno, asi tengo mi codigo.

SELECT SUM(horasxdia) FROM `historial` where idusuario='2' and fecha BETWEEN '2011-03-25' AND '2011-04-07'

lo malo es que la suma me la hace, en números enteros y no respeta el formato de hora es decir
tengo 01:30:00, 02:00:00 y 00:10:00 no es lo mismo 340 horas de trabajo a 3:40 horas de trabajo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar