Hola Dylanrv:
A ver si entendí bien... según yo lo que quieres hacer es lo siguiente.
1. Extraer de una tabla los registros comprendidos entre dos fechas.
2. Si entre las dos fechas existen más de 12 registros, entonces traer los más cercanos a la primer fecha.
3. Si entre las dos fechas existen exactamente 12 registros, entonces traer esos 12 registros.
4. Si entre las dos fechas existen menos de 12 registros, completar los 12 registros con aquellos que se acerquen más a la fecha inferior, no importa que no se encuentren dentro del rango de las dos fechas.
Si estoy correcto en el planteamiento, creo que podrías hacerlo así:
Veamos algunos ejemplos... supongamos que tenemos los siguientes datos:
Código MySQL:
Ver original+------+------------+
| id | fecha |
+------+------------+
| 1 | 2013-05-01 |
| 2 | 2013-05-02 |
| 3 | 2013-05-03 |
| 4 | 2013-05-04 |
| 5 | 2013-05-05 |
| 6 | 2013-05-06 |
| 7 | 2013-05-07 |
| 8 | 2013-05-08 |
| 9 | 2013-05-09 |
| 10 | 2013-05-10 |
| 11 | 2013-05-11 |
| 12 | 2013-05-12 |
| 13 | 2013-05-13 |
| 14 | 2013-05-14 |
| 15 | 2013-05-15 |
| 16 | 2013-05-16 |
+------+------------+
16 rows
in set (0.00 sec
)
Si ponemos como fechas los dos límites (2013-05-01 y 2013-05-16), existen 16 registros, el resultado deberá mostrar los primeros 12:
Código MySQL:
Ver originalmysql
> SET @fechaInferior
= '2013-05-01';Query OK, 0 rows affected (0.00 sec)
mysql
> SET @fechaSuperior
= '2013-05-16';Query OK, 0 rows affected (0.00 sec)
-> (
-> WHERE fecha
<= @fechaSuperior
-> ) T
+------+------------+
| id | fecha |
+------+------------+
| 1 | 2013-05-01 |
| 2 | 2013-05-02 |
| 3 | 2013-05-03 |
| 4 | 2013-05-04 |
| 5 | 2013-05-05 |
| 6 | 2013-05-06 |
| 7 | 2013-05-07 |
| 8 | 2013-05-08 |
| 9 | 2013-05-09 |
| 10 | 2013-05-10 |
| 11 | 2013-05-11 |
| 12 | 2013-05-12 |
+------+------------+
12 rows
in set (0.00 sec
)
Si ponemos como limites (2013-05-03 y 2013-05-14), existen EXACTAMENTE 12 REGISTROS, por lo tanto muestra esos:
Código MySQL:
Ver originalmysql
> SET @fechaInferior
= '2013-05-03';Query OK, 0 rows affected (0.00 sec)
mysql
> SET @fechaSuperior
= '2013-05-14';Query OK, 0 rows affected (0.00 sec)
-> (
-> WHERE fecha
<= @fechaSuperior
-> ) T
+------+------------+
| id | fecha |
+------+------------+
| 3 | 2013-05-03 |
| 4 | 2013-05-04 |
| 5 | 2013-05-05 |
| 6 | 2013-05-06 |
| 7 | 2013-05-07 |
| 8 | 2013-05-08 |
| 9 | 2013-05-09 |
| 10 | 2013-05-10 |
| 11 | 2013-05-11 |
| 12 | 2013-05-12 |
| 13 | 2013-05-13 |
| 14 | 2013-05-14 |
+------+------------+
12 rows
in set (0.00 sec
)
Si ponemos como limites (2013-05-10 y 2013-05-16) sólo existen 7 registros, por lo que se mostrarán esos 7 registros más los 5 registros más cercanos al límite inferior:
Código MySQL:
Ver originalmysql
> SET @fechaInferior
= '2013-05-10';Query OK, 0 rows affected (0.00 sec)
mysql
> SET @fechaSuperior
= '2013-05-16';Query OK, 0 rows affected (0.00 sec)
-> (
-> WHERE fecha
<= @fechaSuperior
-> ) T
+------+------------+
| id | fecha |
+------+------------+
| 5 | 2013-05-05 |
| 6 | 2013-05-06 |
| 7 | 2013-05-07 |
| 8 | 2013-05-08 |
| 9 | 2013-05-09 |
| 10 | 2013-05-10 |
| 11 | 2013-05-11 |
| 12 | 2013-05-12 |
| 13 | 2013-05-13 |
| 14 | 2013-05-14 |
| 15 | 2013-05-15 |
| 16 | 2013-05-16 |
+------+------------+
12 rows
in set (0.00 sec
)
Espero que esto sea más o menos lo que esperas... si no es así, trata de explicar con datos, tal como lo he hecho qué es lo que esperas como salidas.
Saludos
Leo.