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)
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 <=).
//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.
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.
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.)