MySQL - consulta de horas extras

 
Vista:

consulta de horas extras

Publicado por janet (6 intervenciones) el 18/08/2008 19:31:03
hola alguien me podria ayudar a complementar una consulta, tengo este problema la consulta realiza la resta de hora salida menos hora de entrada y esta sele resta 10:30:00 para el resultado me de las horas extras hasta hay esta bien de lunes a viernes pero el sabado solo trabajan 05:30:00 asi que ya no me funciona lo que hice anterior mente porque si todo lo agrupo me faltan hras extras de sabado
La hora de trabajo es de lunes a viernes de 07:30 a 18:00 pero es sabado es de 07:30:00 a 13:00:00.
ejemplo: 2008-07-18(viernes)entre el empleado a las 07:35:04 19:31:08 asi que las hras extras son 01:26:04 pero el sabado(2008-07-19) trabajo 07:35:04 18:31:08 se supone que trabajo horas extras 05:25:04
Ya he intendado esto: if(count(*)>=6,((SUM(LEFT(IF(SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada))>= '11:20:00', SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada)-'37800') ,'0'),2))

Pero no me queda ya se me agotaron las ideas alguna idea gracias, esta es la consulta que tengo:

SELECT id,apellido as NOMBRE, empresa AS EMPRESA, ctrabajo as CTRABAJO, tipoemp AS TIPOEMP, puesto AS PUESTO, IF(count(*)=12, count(h_entrada)+2, IF(count(*)=6, count(h_entrada)+1, count(h_entrada))) as DIAS_TRAB, ((SUM(LEFT(IF(SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada))>='11:20:00', SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada)-'37800') ,'0'),2)) +sum(IF(SUBSTRING(IF(SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada))>='11:20:00', SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada)-'37800') ,'0'),4,2)>=50,'1','0')))) AS HRS_EXT from Resultado_Inc2 where fecha between 'fecha = ".2008-07-14."' and 'fecha = ".2008-07-20."' and h_entrada > '00:00:00' AND empresa='4' AND tipoemp='D' AND ctrabajo='5' GROUP BY id ORDER BY id limit 6
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:consulta de horas extras

Publicado por pako (1 intervención) el 22/08/2008 22:57:29
Hola Janet:
Se me ocure que es mejor definir una tabla con el horario de lunes a viernes y uno de sabado. Para sacar las horas extras bastaria comparar el dia de trabajo y obtener el horario de ese dia, luego saca el total de horas de trabajo del empleado y se lo restas al total de horas trabajo del dia, asi obtienes las horas extras de ese dia.

Cuando toque el dia sabado harias lo mismo, por ultimo harias una sumatoria de todas las horas extras de la semana.

TABLA:
Dia - Horario Entrada - Horario Salida - total Horas Laborales
Lunes 7:30 15:30 8:00
martes 7:30 15:30 8:00
......
Sabado 7:30 12:30 5:00

Espero que esto te pueda ayuda.

Saludos.
Pako.
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:consulta de horas extras

Publicado por JANET (6 intervenciones) el 26/08/2008 20:33:54
hola gracias por contestar no me queda muy clara tu idea aun pero voy a intentar haber que sale he encontrado otra forma pero no se porque no me queda es esta, ahora le agrege un CASE pero cuando la sumo solo me suma de lunes a viernes creo cuponer que es por el group by id, bueno eso creo crees que ese por eso o no bueno gracias
esta es la ultima consulta he echo, porque si funciona bien aqui no funciona al sumar:
SELECT fecha, h_entrada, h_salida, apellido, empresa, ctrabajo, tipoemp, puesto, id, SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada)) AS HRSTRABAJADAS,if (SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada))>='05:00:00',if((CASE DAYOFWEEK(fecha) WHEN 1 THEN 'Domingo' WHEN 2 THEN 'Lunes' WHEN 3 THEN 'Martes' WHEN 4 THEN 'Miercoles' WHEN 5 THEN 'Jueves' WHEN 6 THEN 'Viernes' WHEN 7 THEN 'Sabado' END)='Sabado',IF(SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada))>='06:20:00',SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada)-'19800'),IF(SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada))>='06:20:00',SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada)-'19800'), SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada)-'19800'))),IF(h_salida>='18:50:00',SEC_TO_TIME(TIME_TO_SEC(h_salida) - TIME_TO_SEC(h_entrada)-'37800') ,'0')),0)as HRSEXTRA from Resultado_Inc2 where fecha between 'fecha = ".2008-08-18."' and 'fecha = ".2008-08-25."' order by id
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