2014-09-16 4 views
1

Je suis en train de JOINDRE l'enregistrement le plus récent de la table "corr" pour le reste de ma recherche. Au lieu du dernier enregistrement, il rejoint le premier enregistrement.MySQL JOIN dernier enregistrement

Des suggestions?

SELECT c.*, 
     cc.*, 
     com.*, 
     cor.corr_id, 
     cor.corr_method, 
     cor.corr_action, 
     cor.corr_description, 
     cor.corr_date_added 
FROM contacts c 
LEFT JOIN companies_contacts cc 
    ON c.contact_id = cc.contact_id 
LEFT JOIN companies com 
    ON com.company_id = cc.company_id 
LEFT JOIN 
    (SELECT contact_id, 
      corr_id, 
      MAX(corr_date_added) AS max_date_added 
    FROM corr 
    GROUP BY contact_id) y 
    ON y.contact_id = c.contact_id 
LEFT JOIN corr cor 
    ON cor.corr_id = y.corr_id 
GROUP BY cc.com_con_id 
ORDER BY c.contact_last_name ASC 
LIMIT 0, 25 

CE TRAVAILLE:

SELECT c.*, cc.*, com.*, cor.corr_id, cor.corr_method, cor.corr_action, cor.corr_description, cor.corr_date_added 
FROM contacts c 
LEFT JOIN companies_contacts cc ON c.contact_id = cc.contact_id 
LEFT JOIN companies com ON com.company_id = cc.company_id 
LEFT JOIN (SELECT max.contact_id, max.corr_id, MAX(max.corr_date_added) AS max_date_added 
FROM corr max GROUP BY max.contact_id) y ON y.contact_id = cc.contact_id 
LEFT JOIN corr cor ON max_date_added = cor.corr_date_added AND y.contact_id = cor.contact_id 
GROUP BY cc.com_con_id 
ORDER BY c.contact_last_name ASC LIMIT 0,25 
+0

Le problème est MAX ne retournera la valeur la plus élevée du champ corr_date_add. Il ne renvoie pas la ligne associée à cette valeur. – winternights83

Répondre

0

Cela a fonctionné:

SELECT c.*, cc.*, com.*, cor.corr_id, cor.corr_method, cor.corr_action, cor.corr_description, cor.corr_date_added 
FROM contacts c 
LEFT JOIN companies_contacts cc ON c.contact_id = cc.contact_id 
LEFT JOIN companies com ON com.company_id = cc.company_id 
LEFT JOIN (SELECT max.contact_id, max.corr_id, MAX(max.corr_date_added) AS max_date_added 
FROM corr max GROUP BY max.contact_id) y ON y.contact_id = cc.contact_id 
LEFT JOIN corr cor ON max_date_added = cor.corr_date_added AND y.contact_id = cor.contact_id 
GROUP BY cc.com_con_id 
ORDER BY c.contact_last_name ASC LIMIT 0,25