Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Calculo con fechas, fecha inicio y fecha fin

Estas en el tema de Calculo con fechas, fecha inicio y fecha fin en el foro de Mysql en Foros del Web. Buenos dias, mi inquietud es la siguiente: Tengo un proyecto en el cual los trabajadores de una empresa deben ingresar la fecha en que ingresan ...
  #1 (permalink)  
Antiguo 14/08/2011, 08:14
 
Fecha de Ingreso: enero-2005
Mensajes: 122
Antigüedad: 19 años, 10 meses
Puntos: 2
Calculo con fechas, fecha inicio y fecha fin

Buenos dias, mi inquietud es la siguiente:

Tengo un proyecto en el cual los trabajadores de una empresa deben ingresar la fecha en que ingresan y en la que salen.

Si entraran y salieran en un dia una vez por evento, osea una entrada en la mañana y otra en la tarde podria estructurar una tabla donde pusiera dos campos, hora_inicio y hora_fin:

Código SQL:
Ver original
  1. +-------------+-----------+-----------+
  2. | empleado_id | fecha_ini | fecha_fin |
  3. +-------------+-----------+-----------+

con esto cuando hiciera la consulta sacaria las horas trabajadas y listo. Pero en este caso los empleados pueden entrar y salir las veces que quieran por ejemplo:

Entran a las 7:00 AM y salen a la 1:00 PM, entran a las 2:00 PM y salen a las 5:00 PM

Ahi el sistema deberia sacar las horas entre cada rango, esto quiere decir que en este dia el empleado trabajo 6 horas en la mañana y 3 horas en la tarde para un total de 9 horas en ese dia.

Podria suceder este otro caso:

Entra a las 7:00 AM sale a las 9:00 AM entra a las 11:00 AM sale a la 1:00 PM entra a las 2:00 PM y sale a las 5:00 PM

Este es el caso tipico de una cita medica o una diligencia que mientras esta por fuera de la empresa no se debe tener en cuenta este tiempo.

Los tiempos serian 2 horas + 2 horas +3 horas para un total de 7 horas trabajadas ya que se ausento 2 horas en la mañana.

En esto es que necesito me orienten ya que no se como estructurar una tabla donde vaya toda esta lógica.

Muchas gracias.

Última edición por Brahyam; 14/08/2011 a las 08:43
  #2 (permalink)  
Antiguo 16/08/2011, 09:13
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Calculo con fechas, fecha inicio y fecha fin

Hola Brahyam:

En tu post no lo mencionas, pero me imagino que tos campos fecha_ini y fecha_fin son de tipo DATETIME. Para obtener las horas laboradas por un empleado en un día simplemente tendrías que restar las fechas y utilizar la función HOUR, agrupando por empleado y por fecha, más o menos así:

Código MySQL:
Ver original
  1. mysql> create table TuTabla (empleado_id int, fecha_ini datetime,
  2.     -> fecha_fin datetime);
  3. Query OK, 0 rows affected (0.11 sec)
  4.  
  5. mysql> INSERT INTO TuTabla VALUES
  6.     -> (1, '2011-08-16 07:00', '2011-08-16 09:00'),
  7.     -> (1, '2011-08-16 11:00', '2011-08-16 13:00'),
  8.     -> (1, '2011-08-16 14:00', '2011-08-16 17:00'),
  9.     -> (2, '2011-08-16 07:00', '2011-08-16 13:00'),
  10.     -> (2, '2011-08-16 14:00', '2011-08-16 17:00');
  11. Query OK, 5 rows affected (0.06 sec)
  12. Records: 5  Duplicates: 0  Warnings: 0
  13.  
  14. mysql>  SELECT empleado_id, SUM(HOUR(fecha_fin - fecha_ini)) horas_trabajadas
  15.     ->  FROM TuTabla GROUP BY empleado_id, DATE(fecha_ini);
  16. +-------------+------------------+
  17. | empleado_id | horas_trabajadas |
  18. +-------------+------------------+
  19. |           1 |                7 |
  20. |           2 |                9 |
  21. +-------------+------------------+
  22. 2 rows in set (0.00 sec)


Ahora bien, esta consulta tiene el supuesto que la hora de inicio y fin corresponden al mismo día, es decir, no funcionaría por ejemplo para un turno nocturno, donde la fecha de inicio es por la noche y la fecha de fin es por el día, pero de un día distinto. Si en tu proyecto manejas este tipo de casos deberás tratarlos de manera especial

Dale un vistazo al código y nos comentas.

Saludos
Leo.

Etiquetas: calculo, campos, fecha, fechas, inicio, tabla, find
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:11.