Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/02/2009, 03:54
osini
 
Fecha de Ingreso: junio-2003
Ubicación: Granada
Mensajes: 27
Antigüedad: 20 años, 10 meses
Puntos: 1
Problema en un SELECT con LIMIT y ORDER

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.