2012-09-06 18 views
10

Tengo una consulta que necesita el registro más reciente de una tabla secundaria llamada tbl_emails_sent.subconsulta de mysql dentro de una UNIÓN IZQUIERDA

Esa tabla contiene todos los correos electrónicos enviados a los clientes. Y la mayoría de los clientes tienen varios cientos de correos electrónicos grabados. Quiero sacar una consulta que muestra la más reciente.

Ejemplo:

SELECT c.name, c.email, e.datesent 
FROM `tbl_customers` c 
LEFT JOIN `tbl_emails_sent` e ON c.customerid = e.customerid 

supongo un LEFT JOIN con una subconsulta se usaría, pero no ahondar en subconsultas mucho. ¿Estoy yendo en la dirección correcta?

Actualmente, la consulta anterior no está optimizada para especificar el registro más reciente de la tabla, por lo que necesito un poco de ayuda.

Respuesta

19

Debe ser así, debe tener una consulta por separado para obtener la fecha máxima (o la última fecha) en que se envió el correo electrónico.

SELECT a.*, b.* 
FROM tbl_customers a 
      INNER JOIN tbl_emails_sent b 
       ON a.customerid = b.customerid 
      INNER JOIN 
      (
       SELECT  customerid, MAX(datesent) maxSent 
       FROM  tbl_emails_sent 
       GROUP BY customerid 
      ) c ON c.customerid = b.customerid AND 
        c.maxSent = b.datesent 
1

¿Esto no funciona?

SELECT t1.datesent,t1.customerid,t2.email,t2.name 
FROM 
(SELECT max(datesent) AS datesent,customerid 
FROM `tbl_emails_sent` 
) as t1 
INNER JOIN `tbl_customers` as t2 
ON t1.customerid=t2.customerid 

único problema que tiene es, entonces, lo que si dos datesents son los mismos, ¿cuál es el factor decisivo en el que uno obtiene recogido?

Cuestiones relacionadas