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

Ayuda con consulta para buscar cual usuario esta disponible en un rango de tiempo!!!

Estas en el tema de Ayuda con consulta para buscar cual usuario esta disponible en un rango de tiempo!!! en el foro de Bases de Datos General en Foros del Web. Hola amigos, les cuento; estoy desarrollando un aplicacion y necesito de su ayuda para realizar las consutas de los usuarios que estan disponible en un ...
  #1 (permalink)  
Antiguo 15/12/2008, 05:25
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 15 años, 8 meses
Puntos: 0
Exclamación Ayuda con consulta para buscar cual usuario esta disponible en un rango de tiempo!!!

Hola amigos, les cuento; estoy desarrollando un aplicacion y necesito de su ayuda para realizar las consutas de los usuarios que estan disponible en un rango de tiempo.

Por ejemplo: Necesito consultar que usuario estara disponible de 9:30 am - 11:15 am, para ello cuento con varios usuarios, pero cada usuario tiene tareas asignadas con hora de inicio y hora de fin, entonces necesitaria consultar que usuarios estan disponibles en el rango de tiempo de 9:30 am - 11:15 am.

Lo basico es que tengo 2 tablas, una de usuarios que guarda el id y el nombre del usuario, y otra que es donde se guardan los itinerarios de tareas, para saber que tarea le corresponde a cada usuario y cual es la hora de inicio y fin; en esta tabla es donde tengo que hacer la consulta.

Las tablas serian asi:

->usuarios
id_usuario
nombre_usuario

->itinerario_tareas
id_tarea
id_usuario
fecha_hora_inicio
fecha_hora_fin

De antemano gracias por su grandiosa ayuda... Saludos
  #2 (permalink)  
Antiguo 15/12/2008, 07:31
Avatar de Piruleta  
Fecha de Ingreso: enero-2008
Ubicación: En Madrid
Mensajes: 36
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Ayuda con consulta para buscar cual usuario esta disponible en un rango de

select a.id_usuario, a.nombre_usuario
from usuarios a
where a.id_usuario not in (select b.id_usuario from itinerario_tareas where fecha_hora_inicio >= <fecha hora inicial> and fecha_hora_fin <= <fecha hora final>)

Espero que te sirva...
  #3 (permalink)  
Antiguo 15/12/2008, 11:11
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Ayuda con consulta para buscar cual usuario esta disponible en un rango de

gracias por tu respuesta Piruleta, pero en realidad asi no funciona porque el solo pregunta por los usuarios que estan disponibles exactamente de 9:30 AM a 11:15 AM, pero por ejemplo alomejor ese usuario tiene una tarea de 8:00 AM a 2:00 PM e igual lo toma y no se puede porque esta ocupado por 6 horas consecutivas.
De todas maneras gracias por tu colaboracion, ojala alguien pueda ayudarme...
  #4 (permalink)  
Antiguo 15/12/2008, 14:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ayuda con consulta para buscar cual usuario esta disponible en un rango de

Los campos fecha_hora_inicio y fecha_hora_fin son campos tipo time en mi ejemplo. Observa el tratamiento del rango. Busco los que no tienen ocupadas horas entre las 9:30 y las 11:15.

Código sql:
Ver original
  1. SELECT id_usuario, nombre_usuario
  2. FROM usuarios
  3. WHERE id_usuario NOT
  4. IN (
  5.  
  6. SELECT id_usuario
  7. FROM itinerario_tareas
  8. WHERE (
  9. '09:30:00' <= fecha_hora_inicio
  10. AND '09:30:00' >= fecha_hora_inicio
  11. )
  12. OR (
  13. '09:30:00' >= fecha_hora_inicio
  14. AND '11:15:00' <= fecha_hora_fin
  15. )
  16. )
  #5 (permalink)  
Antiguo 15/12/2008, 16:47
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 15 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Ayuda con consulta para buscar cual usuario esta disponible en un rango de

gracias jurena, lo corri de 2 formas y funciona, lo probe de la forma como me dijiste y tambien asi:

Código:
SELECT id_usuario, nombre_usuarioFROM usuarios
WHERE id_usuario NOT IN ( SELECT id_usuarioFROM itinerario_tareas
WHERE ('09:30:00' <= fecha_hora_inicio AND '11:15:00' >= fecha_hora_fin)
OR ('09:30:00' >= fecha_hora_inicio AND '11:15:00' <= fecha_hora_fin))
En realidad cual es la correcta???
  #6 (permalink)  
Antiguo 15/12/2008, 19:59
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 15 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Ayuda con consulta para buscar cual usuario esta disponible en un rango de

Gracias a todos los foreros por su colaboracion, de todas las respuesta saque un poco y logre el resultado final, y al parecer quedo perfecto, lo probe con todos los casos posibles y hasta los momentos funciono bien.

Aqui les dejo el query definitivo para consultar por rango de fechas:

select a.id_usuario, a.nombre_usuario
from mit.mit_usuarios a
where a.id_usuario not in
(select DISTINCT(b.id_usuario) from mit.mit_itinerario_usuarios b
where (fecha_hora_inicio <= '09:30:00' AND fecha_hora_fin >= '09:30:00')
OR (fecha_hora_inicio <= '11:15:00' AND fecha_hora_fin >= '11:15:00')
OR (fecha_hora_inicio >= '09:30:00' AND fecha_hora_fin <= '11:15:00'))

  #7 (permalink)  
Antiguo 16/12/2008, 02:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ayuda con consulta para buscar cual usuario esta disponible en un rango de

Perdona, me confundí. Creo que esta es la más apropiada (no la he probado):
Código sql:
Ver original
  1. SELECT id_usuario, nombre_usuario
  2. FROM usuarios
  3. WHERE id_usuario NOT
  4. IN (
  5.  
  6. SELECT DISTINCT id_usuario
  7. FROM itinerario_tareas
  8. WHERE (
  9. '09:30:00' <= fecha_hora_inicio
  10. AND '11:15:00' >= fecha_hora_inicio
  11. )
  12. OR (
  13. '09:30:00' >= fecha_hora_inicio
  14. AND '09:30:00' <= fecha_hora_fin
  15. )
  16. )

La lógica es:
si la primera hora es menor o igual que la fecha_hora_inicio, la segunda hora debe ser mayor o igual que esa fecha_hora_inicio para ocupar algo del rango; si la primera hora es posterior a la fecha_hora_inicio, esa primera hora debe ser también anterior o igual a la fecha_hora_fin para ocupar algo del rango. Los iguales pueden parecer redundantes, pero no estorban y aseguran todas las situaciones, aunque en ocasiones se encuentre dos veces, es decir por las dos opciones del OR.

Última edición por jurena; 17/12/2008 a las 10:05
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:49.