[ Foro de SQL (y MySQL) ]

Fechas entre un rango de periodo

09-Sep-2015 19:34
Dulce Yuridia Cárdenas Jaramillo
4 Respuestas

Si tengo la siguiente lista de fechas.
¿Habría forma de poder consultar para que me arroje solamente las fechas más actuales a un periodo determinado?

Existen la siguiente condición:
*Incluir aquella última fecha que se encuentre anterior al periodo, cuando no exista`Fecha` al inicio del periodo. (En este ejemplo 21/04/2014)

Fecha    
06/06/2012
06/01/2014
11/04/2014
24/04/2014

Por ejemplo: (21/04/2014 - 27/04/2014)
Fecha
11/04/2014
24/04/2014

Explicación de ejemplo:
Días que representa = Fecha
[21, 22, 23]                  = 11/04/2014 (última anterior)
[24, 25, 26, 27]            = 24/04/2014 (Entre periodo)


14-Sep-2015 23:33
Nacho Cabanes (+84)

No acabo de entender la pregunta, pero creo que debes mostrar siempre dos fechas. La primera sería la máxima que sea menor a la primera (un SELECT dentro de otro) y la segunda serían las fechas que están entre dos dadas (un único SELECT que compare con >= y con <=).


14-Sep-2015 23:46
Dulce Yuridia Cárdenas Jaramillo

//Tomar el periodo que esté una semana anterior a la fecha de inicio indicada en el parámetro, que abarque la incapacidad


SELECT DetalladoPeriodosID, DiasTrabajados, InicioPeriodo, FinPeriodo
FROM DetalladoPeriodos
//where FinPeriodo BETWEEN '20150901' AND '20150928'
WHERE FinPeriodo BETWEEN {ParamInicioIncapacidad} AND {ParamFinIncapacidad}

UNION(
	//Toma exactamente los periodos que estan solamente entre las fechas indicadas.
	SELECT DetalladoPeriodosID, InicioPeriodo, FinPeriodo
	FROM DetalladoPeriodos
	//where InicioPeriodo >= '20150901'	
	//AND FinPeriodo <= '20150928'		
	WHERE InicioPeriodo >= {ParamInicioIncapacidad}
	AND FinPeriodo <= {ParamFinIncapacidad}		
)

UNION(
	//Tomar el periodo que esté una semana después a la fecha de fin indicada en el parámetro, que abarque la incapacidad
	SELECT DetalladoPeriodosID, InicioPeriodo, FinPeriodo
	FROM DetalladoPeriodos
	//where InicioPeriodo BETWEEN '20150901' AND '20150928'
	WHERE InicioPeriodo BETWEEN {ParamInicioIncapacidad} AND {ParamFinIncapacidad}
)

ORDER BY InicioPeriodo


*Era algo así solo que tengo que hacerle saltar los duplicados, por lo de las uniones, pero fue la única forma que se me ha ocurrido, no se si exista una mejor.


15-Sep-2015 00:14
Nacho Cabanes (+84)

Si lo he entendido bien, en el segundo estamos de acuerdo, sería algo como


SELECT campos FROM tabla
WHERE fecha >= fechaInicio
AND fecha <= fechaFin


Para el primero, debería ser algo como


SELECT MAX(fecha) FROM 
(
SELECT * FROM tabla
WHERE fecha < fechaIniciotabla
)


Para evitar duplicados, te basta con un "DISTINCT". También es habitual que te interese un "ORDER BY fecha" en el segundo caso.


15-Sep-2015 00:34
Dulce Yuridia Cárdenas Jaramillo

Oh! Si entiendo lo que ha dicho, muchas gracias. Tiene razón, no lo había pensado así.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)