Ver Mensaje Individual
  #6 (permalink)  
Antiguo 24/06/2010, 15:00
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con consulta anidada

SELECT m.id, m.nombre, t1.estado, t1.fechacreacion FROM MATERIAL m INNER JOIN (SELECT idmaterial, estado, fechacreacion FROM HISTORIAL_MATERIAL WHERE estado = 1 ORDER BY fechacreacion DESC)t1 on t1.idmaterial = m.id WHERE t1.estado = 1 GROUP BY m.id

El estado lo buscas dentro, porque reduces el número de registros en la selección y eliminas una subconsulta, aunque luego tienes que volver a introducirlo en el where final, dada el tipo de cruce con INNER JOIN basado sólo en el idmaterial.
El truco sobre el que preguntabas: cuando MySQL agrupa, sólo devuelve el primer registro de los que comparten el elemento agrupado; yo con el order by desc pongo como primero de cada id el que tiene la última fecha, y al agrupar me conserva sólo ese.

Última edición por jurena; 24/06/2010 a las 23:28