Ver Mensaje Individual
  #19 (permalink)  
Antiguo 16/06/2009, 12:29
zerts
 
Fecha de Ingreso: junio-2009
Ubicación: Bogota
Mensajes: 16
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Calcular horas trabajadas nocturnas MySQL

Muchas gracias a todos por sus opiniones y a la ayuda proporcionada, creo que ya termine la consulta, me quedo así

Código SQL:
Ver original
  1. SELECT IdHora,  SEC_TO_TIME( SUM( HT ) ) HorasTrabajadas
  2. FROM (
  3. SELECT IdHora, TIME_TO_SEC( SUBTIME( '06:00', HorIni  ) ) HT
  4. FROM HorasTrab
  5. WHERE (
  6. HorIni  < '06:00'
  7. AND HorFin > '06:00'
  8. AND HorIni  < HorFin
  9. )
  10. UNION SELECT IdHora, TIME_TO_SEC( SUBTIME( HorFin, '18:00' ) ) HT
  11. FROM HorasTrab
  12. WHERE (
  13. HorIni  < '18:00'
  14. AND HorFin > '18:00'
  15. AND HorIni  < HorFin
  16. )
  17. UNION SELECT IdHora, TIME_TO_SEC( SUBTIME( '06:00', HorFin ) ) HT
  18. FROM HorasTrab
  19. WHERE (
  20. HorIni  >'06:00'
  21. AND HorFin < '06:00'
  22. AND HorIni  < HorFin
  23. )
  24. UNION SELECT IdHora, TIME_TO_SEC( ADDTIME( ADDTIME( SUBTIME( '24:00', HorIni  ) , '06:00' ) , SUBTIME( HorFin, '18:00' ) ) ) HT
  25. FROM HorasTrab
  26. WHERE (
  27. HorIni  > '18:00'
  28. AND HorFin > '18:00'
  29. AND HorIni  > HorFin
  30. )
  31. UNION SELECT IdHora, TIME_TO_SEC( ADDTIME( SUBTIME( '06:00', HorIni  ) , ADDTIME( HorFin, '06:00' ) ) ) HT
  32. FROM HorasTrab
  33. WHERE (
  34. HorIni  < '06:00'
  35. AND HorFin < '06:00'
  36. AND HorIni  > HorFin
  37. )UNION SELECT IdHora, TIME_TO_SEC( ADDTIME('06:00',HorFin  ) ) HT
  38. FROM HorasTrab
  39. WHERE (
  40. HorIni  > '06:00'
  41. AND HorIni  < '18:00'
  42. AND HorFin <'06:00'
  43. AND HorIni  > HorFin
  44. )
  45. UNION SELECT IdHora, TIME_TO_SEC( ADDTIME('06:00',SUBTIME( '24:00', HorIni  )  ) ) HT
  46. FROM HorasTrab
  47. WHERE (
  48. HorIni  > '18:00'
  49. AND HorFin >'06:00'
  50. AND HorFin < '18:00'
  51. AND HorIni  > HorFin
  52. )
  53. UNION SELECT IdHora, TIME_TO_SEC('12:00') HT
  54. FROM HorasTrab
  55. WHERE (
  56. HorIni  < '18:00'
  57. AND HorIni  > '06:00'
  58. AND HorFin < '18:00'
  59. AND HorFin >'06:00'
  60. AND HorIni  > HorFin
  61. )
  62. UNION SELECT IdHora, TIME_TO_SEC('00:00') HT
  63. FROM HorasTrab
  64. WHERE (
  65. HorIni  >= '06:00'
  66. AND HorFin <= '18:00'
  67. OR HorIni =HorFin
  68. )
  69. )T1
  70. GROUP BY IdHora
Cualquier sugerencia es bienvenida