Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/12/2011, 10:38
wchiquito
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 11 meses
Puntos: 42
Respuesta: Curioso Problema(¿SQL puede hacerlo?)

Hola CapLurker,

Una posible opción es como se muestra abajo, sin embargo, es importante mencionar que esa consulta no es escalable, con pocos datos no tendrás problema pero al incrementar los datos el rendimiento disminuirá. Discutir en clase alternativas para optimizar/mejorar la consulta con grandes cantidades de datos.

Código MySQL:
Ver original
  1. /*Table structure for table `horario` */
  2.  
  3. DROP TABLE IF EXISTS `horario`;
  4.  
  5. CREATE TABLE `horario` (
  6.   `usuario` varchar(10) default NULL,
  7.   `fecha` date default NULL,
  8.   `hora` time default NULL
  9.  
  10. /*Data for the table `horario` */
  11.  
  12. insert  into `horario`(`usuario`,`fecha`,`hora`)
  13. ('0001','2011-01-01','08:02:56'),('0002','2011-01-01','08:03:00'),
  14. ('0001','2011-01-01','14:02:00'),('0002','2011-01-01','14:03:51'),
  15. ('0001','2011-01-01','15:36:12'),('0002','2011-01-01','15:31:23'),
  16. ('0001','2011-01-01','17:12:15'),('0002','2011-01-01','17:11:21');
  17.  
  18.     h.fecha,
  19.     h.usuario,
  20.     min(hem.hora) as 'entrada mañana',
  21.     max(hsm.hora) as 'salida mañana',
  22.     min(het.hora) as 'entrada tarde',
  23.     max(hst.hora) as 'salida tarde'
  24. from horario h
  25.     left join horario hem on h.usuario = hem.usuario and hem.hora < time('09:00:00')
  26.     left join horario hsm on h.usuario = hsm.usuario and hsm.hora between time('09:00:01') and time('15:00:00')
  27.     left join horario het on h.usuario = het.usuario and het.hora between time('15:00:01') and time('16:00:00')
  28.     left join horario hst on h.usuario = hst.usuario and hst.hora > time('16:00:01')
  29. where h.fecha = date('2011-01-01')
  30. group by h.usuario, h.fecha;

Última edición por wchiquito; 22/12/2011 a las 17:08