Ver Mensaje Individual
  #21 (permalink)  
Antiguo 16/06/2009, 15:19
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

Cita:
Iniciado por jurena Ver Mensaje
Zerts, a mí no me ofrece los resultados esperados:
23:00:00 04:00:00 05:00:00 2009-06-23 debería dar 05:00:00
23:00:00 02:00:00 03:00:00 2009-06-16 debería dar 03:00:00
19:00:00 22:00:00 03:00:00 2009-06-17 debería dar 03:00:00
Haz una prueba y verás que da 00:00:00 en las dos primeras y la última ni la tiene en cuenta.
Comprueba los resultados con la consulta que te propuse. Sólo tienes que cambiarle el nombre de la tabla al de HorasTrab
Muchas gracias por revisar la consulta y si tienes razón, creo que ahora si
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. )
  38. UNION SELECT IdHora, TIME_TO_SEC( ADDTIME('06:00',HorFin  ) ) HT
  39. FROM HorasTrab
  40. WHERE (
  41. HorIni > '06:00'
  42. AND HorFin <='06:00'
  43. AND HorIni < '18:00'
  44. AND HorIni > HorFin
  45. )
  46. UNION SELECT IdHora, TIME_TO_SEC( ADDTIME('06:00',SUBTIME( '24:00', HorIni )  ) ) HT
  47. FROM HorasTrab
  48. WHERE (
  49.  HorFin >='06:00'
  50. AND HorIni > '18:00'
  51. AND HorIni > HorFin
  52. )
  53. UNION SELECT IdHora, TIME_TO_SEC( ADDTIME('06:00',SUBTIME( '24:00', HorIni )  ) ) HT
  54. FROM HorasTrab
  55. WHERE (
  56.  HorFin >='06:00'
  57. AND HorIni > '18:00'
  58. AND HorIni > HorFin
  59. )
  60. UNION SELECT IdHora, TIME_TO_SEC(  ADDTIME( SUBTIME( '24:00', HorIni ) , HorFin ) ) HT
  61. FROM HorasTrab
  62. WHERE (
  63. HorIni >= '18:00'
  64. AND HorFin <= '06:00'
  65. AND HorIni > HorFin
  66. )
  67. UNION SELECT IdHora, TIME_TO_SEC( SUBTIME(HorFin ,HorIni ) ) HT
  68. FROM HorasTrab
  69. WHERE (
  70. HorIni >= '18:00'
  71. AND HorFin <='24:00'
  72. AND HorIni < HorFin
  73. )
  74. UNION SELECT IdHora, TIME_TO_SEC( SUBTIME(HorFin ,HorIni ) ) HT
  75. FROM HorasTrab
  76. WHERE (
  77. HorIni >= '00:00'
  78. AND HorFin <='06:00'
  79. AND HorIni < HorFin
  80. )
  81. UNION SELECT IdHora, TIME_TO_SEC('12:00') HT
  82. FROM HorasTrab
  83. WHERE (
  84. HorIni < '18:00' AND HorIni > '06:00'
  85. AND HorFin <= '18:00' AND HorFin >'06:00'
  86. AND HorIni > HorFin
  87. )
  88. UNION SELECT IdHora, TIME_TO_SEC('00:00') HT
  89. FROM HorasTrab
  90. WHERE (
  91. HorIni >= '06:00'
  92. AND HorFin <= '18:00'
  93. OR HorIni=HorFin
  94. )
  95. )T1
  96. GROUP BY IdHora