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

SQL para Intervalo de fechas

Estas en el tema de SQL para Intervalo de fechas en el foro de SQL Server en Foros del Web. Hola necesito ayuda en hacer una consulta de intervalo de fechas esto es mi caso tengo una tabla agenda con los atributos como sigue: Tabla ...
  #1 (permalink)  
Antiguo 12/06/2007, 20:41
 
Fecha de Ingreso: febrero-2006
Mensajes: 10
Antigüedad: 18 años, 3 meses
Puntos: 0
SQL para Intervalo de fechas

Hola necesito ayuda en hacer una consulta de intervalo de fechas esto es mi caso tengo una tabla agenda con los atributos como sigue:

Tabla "agenda"

Persona Fecha_Inicio Fecha_fin actividad
------- ----------- --------- ---------
Carlos 05/06/2007 10/06/2007 Actividad xxxx
Carlos 15/06/2007 18/06/2007 Actividad xxxx
Carlos 25/06/2007 27/06/2007 Actividad xxxx
carlos 30/06/2007 02/07/2007 actividad xxxx
....

Bueno en este caso solo puse los datos de una sola persona para que se entienda mejor, ya que esta tabla "agenda" guarda la actividad de varias personas.
la consulta es determinar los tiempos libres de una persona en un intervalo de fechas dados como parametros, es decir determinar la disponibilidad de una persona donde no tenga actividades,

Por ejemplo:
- determinar la disponibilidad de Carlos desde 01/06/2007 hasta 30/06/2007
Resultado deveria ser:

Fecha_Inicio_Libre Fecha_Fin_Libre
----------------- ---------------
01/06/2007 04/06/2007
11/06/2007 14/06/2007
19/06/2007 24/06/2007
28/06/2007 29/06/2007

bueno este resultado sale de comparar la tabla agenda en base a sus fechas de actividad que tiene

Explicando el resultado:

- el primer registro del resultado es
01/06/2007 al 04/06/2007

porque la consulta requerida es desde 01/06/2007 y su primera actividad carlos empieza de acuerdo a la tabla "agenda" desde el 05/06/2007 asique estaba libre hasta un dia antes

- El segudo registro del resultado es
11/06/2007 al 14/06/2007

porque Carlos su primera actividad termina el 10/06/2007 y su segunda actividad empiesa el 15/06/2007 asi que estuvo disponible desde el 11/06/2007 hasta el dia 14/06/2007

..... y asi sucesivamente para los demas resultados
claro los resultados deben ser hasta la fecha limite de la consulta que en este caso es hasta el 30/06/2007

espero que se me hayan entendido el problema les estare muy agradecidos a la ayuda en hacer el SQL para optener el resultado que explique..
  #2 (permalink)  
Antiguo 13/06/2007, 09:33
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: SQL para Intervalo de fechas

Que tal elyuvic.

Bastante claro tu caso, pero no nos dices con exactitud cual es tu duda.

Porque no haces algún avance y con gusto te ayudaremos, el caso no se ve díficil, solo bastante laborioso ( "talachudo" como decimos en mex-df).

Algunos tips:
1.- Crea una sola lista de fechas:

Código:
SELECT Persona, Fecha_Inicio AS Fecha
FROM Agenda
UNION ALL
SELECT Persona, Fecha_Fin as Fecha
FROM Agenda
2.- Recorres la lista anterior de dos en dos registros. De esta manera dos registros te daran un rango "ocupado", y dos registros consecutivos será un rango "desocupado".

Por ejemplo:

1.-01/01/2007
2.-01/05/2007
3.-01/09/2007
4.-01/10/2007

Los registros 1 y 2 te dan el rango "ocupado" y los registros 2 y 3 te dan un rago "desocupado".

Saludos!!

Última edición por daniel00; 13/06/2007 a las 09:35 Razón: Más info.
  #3 (permalink)  
Antiguo 13/06/2007, 16:31
 
Fecha de Ingreso: febrero-2006
Mensajes: 10
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: SQL para Intervalo de fechas

Hola Daniel gracias por responder a mi pedido, bueno justamente mi duda es como hacerlo el SQL para esta consulta de disponibilidad.
el tips que me das es entendible, con que fucion tendria que recorrer de dos en dos? como en mi consulta necesito pasarle dos variables que podrian ser @FechaDesde y @FechaHasta ya que para ese intervalo de tiempo es saber la disponiblidad, como tendria que analizar con estos dos parametros para poder juntar en una sola columna??
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 07:20.