Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Consulta con fechas de inicio y fin

Estas en el tema de Consulta con fechas de inicio y fin en el foro de Mysql en Foros del Web. Hola gente, estoy bloqueado con una consulta que no consigo hacer. Tengo una tabla similar a esta: Cita: Tasks |------ |Columna|Tipo|Nulo|Predeterminado |------ |//**id**//|int(11)|No| |day_start|datetime|No| |day_end|datetime|No| ...
  #1 (permalink)  
Antiguo 04/03/2014, 10:32
Avatar de Crazylegs  
Fecha de Ingreso: septiembre-2013
Ubicación: Barcelona
Mensajes: 74
Antigüedad: 10 años, 7 meses
Puntos: 14
Consulta con fechas de inicio y fin

Hola gente,

estoy bloqueado con una consulta que no consigo hacer.

Tengo una tabla similar a esta:
Cita:
Tasks
|------
|Columna|Tipo|Nulo|Predeterminado
|------
|//**id**//|int(11)|No|
|day_start|datetime|No|
|day_end|datetime|No|
|user_id|int(11)|No|

|-id|-day_start---------|-day_end-----------|-user_id|

|111|2014-04-03 09:00:00|2014-05-13 19:30:00|39

|112|2014-03-04 16:16:00|2014-03-12 19:00:00|39
Pues lo quiero es que dadas dos fechas (una de inicio y otra de fin) las cuales comprenden un intervalo de tiempo, me muestre las tareas que se encuentran en ese intervalo de tiempo, quepan o no quepan en el intervalo, de un determinado usuario.

Por ejemplo:

Fecha de inicio: 2014-02-24 00:00:00
Fecha final: 2014-04-05 00:00:00
id de usuario: 39

Me debe retornar la 111 y la 112 (la 111 no cabe en el intervalo pero empieza en este, 112 si cabe).


otro ejemplo:

Fecha de inicio: 2014-03-31 00:00:00
Fecha final: 2014-05-11 00:00:00
id de usuario: 39

Me debe retornar la 111 la cual empieza antes y acaba después del intervalo.

De momento tengo esta chapuza de consulta que no funciona correctamente:
Código MySQL:
Ver original
  1. FROM  `tasks`
  2. WHERE user_id =39
  3. AND (
  4. day_start >=  'fecha de inicio'
  5. OR day_end <=  'fecha final'
  6. )

No funciona correctamente porque si la fecha final es menor que day_start la retorna, y lo mismo pasa al revés, es decir, que la fecha de inicio sea mayor que el day_end.

¿Alguna sugerencia?
__________________
¡Mira mis tutoriales web!
  #2 (permalink)  
Antiguo 04/03/2014, 16:35
 
Fecha de Ingreso: abril-2010
Ubicación: Cancun
Mensajes: 88
Antigüedad: 14 años
Puntos: 2
Respuesta: Consulta con fechas de inicio y fin

Código MySQL:
Ver original
  1. FROM  `tasks`
  2. (
  3. day_start >=  'fecha de inicio'
  4. AND day_start <=  'fecha final'
  5. ) OR (
  6. day_end >=  'fecha de inicio'
  7. AND day_end <=  'fecha final'
  8. ) AND user_id =39

Aunque seria mejor
Código MySQL:
Ver original
  1. FROM  `tasks`
  2. (
  3. TIMESTAMP(day_start)   BETWEEN 'fecha de inicio'
  4. AND 'fecha final'
  5. ) OR (
  6. TIMESTAMP(day_end) BETWEEN  'fecha de inicio'
  7. AND 'fecha final'
  8. ) AND user_id =39
Claro si tus campos son timestamp

Última edición por eduardomxm; 04/03/2014 a las 16:40 Razón: Usar Highlight "SQL", por favor, para eso están...
  #3 (permalink)  
Antiguo 05/03/2014, 06:00
Avatar de Crazylegs  
Fecha de Ingreso: septiembre-2013
Ubicación: Barcelona
Mensajes: 74
Antigüedad: 10 años, 7 meses
Puntos: 14
Respuesta: Consulta con fechas de inicio y fin

Muchas gracias eduardomxm!

Muy útil, pero esa consulta tiene el problema siguiente:
Teniendo en cuenta el par de registros que he puesto de ejemplo en el primer post, si me pasan un intervalo más pequeño, de una semana por ejemplo:

Fecha de inicio: 2014-04-21 00:00:00
Fecha final: 2014-04-27 00:00:00
id de usuario: 39

Debería retornar la 111 porque la tarea se encuentra en el intervalo, sin embargo no lo hace, porque ni la fecha de inicio ni la de fin se encuentran en el intervalo.

Gracias a la idea que me has dado, la consulta (creo que correcta) sería:

Código MySQL:
Ver original
  1. FROM  `tasks`
  2. (
  3. day_start >=  'fecha de inicio'
  4. AND day_start <=  'fecha final'
  5. ) OR (
  6. day_end >=  'fecha de inicio'
  7. AND day_end <=  'fecha final'
  8. ) OR (
  9. day_start <  'fecha de inicio'
  10. AND day_end >  'fecha final'
  11. ) AND user_id =39

Si la fecha de inicio es mayor a la inicial de la tarea y la fecha final es menor a la final de la tarea, también se encuentra en el intervalo.

Voy a hacer más pruebas pero yo creo que ya está solucionado, cuando lo haga si todo va bien marco como tema solucionado.
reitero, gracias por tu ayuda.
__________________
¡Mira mis tutoriales web!
  #4 (permalink)  
Antiguo 05/03/2014, 11:34
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta con fechas de inicio y fin

Crazylegs,
echa un vistazo a las FAQ de Mysql por si puede serte de ayuda. En tiempos tratamos sobre esto, un par de fechas comparadas con otro par de fechas, en las que al menos haya un día de coincidencia dentro de rango:
http://www.forosdelweb.com/f86/faqs-mysql-489891/
#24 (permalink)

Última edición por jurena; 05/03/2014 a las 16:59
  #5 (permalink)  
Antiguo 05/03/2014, 14:04
Avatar de Crazylegs  
Fecha de Ingreso: septiembre-2013
Ubicación: Barcelona
Mensajes: 74
Antigüedad: 10 años, 7 meses
Puntos: 14
Respuesta: Consulta con fechas de inicio y fin

Hola Jurena, la verdad es que no lo había visto. Está realmente bien.

Dios, lógica aplastante si señor:
Código MySQL:
Ver original
  1. SELECT * FROM `reservas`
  2.   WHERE @fechainiciocons<=campofechafinres AND @fechafincons >= campofechainiciores

Adaptándolo a mi propósito:

Código MySQL:
Ver original
  1. SELECT * FROM `tasks`
  2.   WHERE day_start <= 'fecha final' AND day_end >= 'fecha de inicio' AND user_id=39

Genial, mucho más simple y optimizada así, gracias por comentarlo. Voy a apuntarlo en mi blog (tranquilo pongo créditos)

Doy el tema por solucionado, gracias a los dos por vuestros útiles aportes.
__________________
¡Mira mis tutoriales web!
  #6 (permalink)  
Antiguo 05/03/2014, 16:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta con fechas de inicio y fin

Crazylegs,
me alegro de que te haya servido. Los créditos para Avatar810 y para las FAQ de forosdelweb. Yo fui un mero intérprete. Entendí que había que subirlo a las FAQ porque llegaban muchas preguntas sobre el tema.

Última edición por jurena; 05/03/2014 a las 16:59
  #7 (permalink)  
Antiguo 05/03/2014, 16:23
Avatar de Crazylegs  
Fecha de Ingreso: septiembre-2013
Ubicación: Barcelona
Mensajes: 74
Antigüedad: 10 años, 7 meses
Puntos: 14
Respuesta: Consulta con fechas de inicio y fin

Ok, el compartir siempre se agradece , en la entrada de mi blog he puesto el enlace a tu mensaje del foro, en el cual ya mencionas el autor original (Avatar810).

Un saludo.
__________________
¡Mira mis tutoriales web!

Etiquetas: inicio, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:19.