Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/06/2011, 14:05
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: un simple select se me complico :(

Hola alexitech, no estoy seguro de haber entendido correctamente lo que necesitas, pero creo que el criterio que tomas para excluir el registro 2 es que el rango de fechas está comprendido en el rango de fechas del registro 3, en otras palabras se podría decir que el registro 2 es una parte del registro 3 correcto???

se me ocurre que hagas algo como esto:

Código MySQL:
Ver original
  1. mysql> create table Horarios (Registro int, id int, fecha_inicio date,
  2.     -> fecha_fin date, horario time, status varchar(15));
  3. Query OK, 0 rows affected (0.08 sec)
  4.  
  5. mysql> insert into Horarios values
  6.     -> (1, 158, '2011-06-15', '2011-06-24', '14:00:00', 'open'),
  7.     -> (2, 159, '2011-06-15', '2011-06-24', '11:00:00', 'blocked'),
  8.     -> (3, 160, '2011-06-01', '2011-06-30', '11:00:00', 'blocked');
  9. Query OK, 3 rows affected (0.05 sec)
  10. Records: 3  Duplicates: 0  Warnings: 0
  11.  
  12. mysql> select * from Horarios;
  13. +----------+------+--------------+------------+----------+---------+
  14. | Registro | id   | fecha_inicio | fecha_fin  | horario  | status  |
  15. +----------+------+--------------+------------+----------+---------+
  16. |        1 |  158 | 2011-06-15   | 2011-06-24 | 14:00:00 | open    |
  17. |        2 |  159 | 2011-06-15   | 2011-06-24 | 11:00:00 | blocked |
  18. |        3 |  160 | 2011-06-01   | 2011-06-30 | 11:00:00 | blocked |
  19. +----------+------+--------------+------------+----------+---------+
  20. 3 rows in set (0.00 sec)
  21.  
  22. mysql> select * from Horarios T1  where status = 'blocked'
  23.     -> and not exists
  24.     -> (
  25.     -> select * from Horarios T2 where
  26.     -> T1.fecha_inicio between T2.fecha_inicio and T2.fecha_fin and
  27.     -> T1.fecha_fin between T2.fecha_inicio and T2.fecha_fin
  28.     -> and T1.status = T2.status and T2.registro != T1.registro
  29.     -> );
  30. +----------+------+--------------+------------+----------+---------+
  31. | Registro | id   | fecha_inicio | fecha_fin  | horario  | status  |
  32. +----------+------+--------------+------------+----------+---------+
  33. |        3 |  160 | 2011-06-01   | 2011-06-30 | 11:00:00 | blocked |
  34. +----------+------+--------------+------------+----------+---------+
  35. 1 row in set (0.01 sec)

La idea de la subconsulta sería buscar un elemento dentro de la tabla en donde el rango de fechas no contenga a las fechas del registro que estás analizando. No sé si me expliqué con palabras, creo que es mejor que lo pruebes con tus datos y nos comentes si te sirve o no.

Saludos
Leo.

--------------------------------------------
La frase más clara sobre el karma, de la retribución del universo,
el que ayuda es ayudado.