Tengo esta tabla:
CREATE 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
Con estos datos:
INSERT INTO `partes` (`id_partes`, `id_usuario`, `fecha`) VALUES
(1,29,'2009-01-05'),
(2,29,'2009-01-06'),
(3,29,'2009-01-07'),
(4,29,'2009-01-08'),
(5,29,'2009-01-09'),
(6,29,'2009-01-10'),
(7,29,'2009-01-11'),
(8,29,'2009-01-12'),
(9,29,'2009-01-13');
Intento hacer este SELECT para que me devuelva el primer registro del usuario 29 que este entre estas fechas '2009-01-05' AND '2009-07-05'
SELECT 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
No devuelve nada. Si cambio el valor del LIMIT a 3 si funciona, pero me devuelve 3 registros y solo necesito 1 (esa es una solución, bastaría con leer un registro)
SELECT 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 3
Si cambio el campo que uso en el ORDER BY por id_partes, tambien funciona pero esto no me vale ya que necesito el orden por fecha.
Hablando con un compañero hemos encontrado este solución:
SELECT * FROM
(SELECT id_partes, fecha, id_usuario
FROM partes
WHERE (id_usuario=29 AND fecha BETWEEN '2009-01-05' AND '2009-07-05') ORDER BY fecha) AS tbltempo
LIMIT 1
Usando 2 consultas, pero no me gusta.
¿Porqué pasa esto? ¿Alguna solución para obtener el primer registro de una tabla entre 2 fechas y ordenado por la fecha?
Gracias.