He probado tu modelo y los datos del mismo (haciendo la salvedad de haber eliminado un campo en el INSERT, porque siendo AUTO_ICREMENT no es necesario ponerlo).
Las sentencias han sido así:
Código sql:
Ver originalCREATE TABLE `partes` (
`id_partes` INT(11) NOT NULL AUTO_INCREMENT,
`id_usuario` INT(11) NOT NULL DEFAULT '0',
`fecha` DATE DEFAULT NULL,
PRIMARY KEY (`id_partes`),
KEY `fecha` (`fecha`),
KEY `id_usuario` (`id_usuario`)
) ENGINE=MyISAM;
Código sql:
Ver originalINSERT INTO `partes` (`id_usuario`, `fecha`) VALUES
(29,'2009-01-05'),
(29,'2009-01-06'),
(29,'2009-01-07'),
(29,'2009-01-08'),
(29,'2009-01-09'),
(29,'2009-01-10'),
(29,'2009-01-11'),
(29,'2009-01-12'),
(29,'2009-01-13');
Código sql:
Ver originalSELECT id_partes, fecha, id_usuario
FROM partes
WHERE (id_usuario=29 AND fecha BETWEEN '2009-01-05' AND '2009-07-05')
ORDER BY fecha LIMIT 1;
El resultado de la última
ha sido correcto y los datos son los esperados (después de haber resuelto un problema de sintaxis que tenía el código que enviaste pues la línea del campo FECHA estaba sin la coma final).
En principio, la sentencia debería funcionar correctamente, ya que los datos devueltos se ajustan a lo que deseas (un solo registro). La única cosa que me quedaría por resolver sería saber
si hay algún problema con la versión de MySQL que estás usando en la prueba y que no nos has indicado.