En supposant que vos identifiants sont numérotés automatiquement, vous feriez comme ceci:
SELECT pe.person_id,
pe.name,
al.activity_name,
al.activity_date
FROM person pe
LEFT JOIN (SELECT p.person_id,
Max(a.activity_id) activity_id
FROM person p
LEFT JOIN activity_log a
ON (p.person_id = a.person_id)
GROUP BY p.person_id) AS LAST
ON pe.person_id = LAST.person_id
LEFT JOIN activity_log al
ON LAST.activity_id = al.activity_id
Cependant, les utilisateurs peuvent saisir des activités passées au plus tard les nouvelles, cela échouera et vous auriez à aller comme ça :
SELECT LAST.person_id,
LAST.name,
LAST.activity_date,
(SELECT activity_name
FROM activity_log al
WHERE al.person_id = LAST.person_id
AND al.activity_date = LAST.activity_date) activity_name
FROM (SELECT p.person_id,
Max(p.name) AS name,
Max(a.activity_date) activity_date
FROM person p
LEFT JOIN activity_log a
ON (p.person_id = a.person_id)
GROUP BY p.person_id) AS LAST
Mais cela a encore un problème: depuis MySQL ne permet pas LIMIT
dans les sous-requêtes, la requête échouera si la même personne a deux activités avec le même activity_date
et c'est la date la plus.
Ce ne retourne que 1 rang et doit montrer encore employés ou des activités – user583576
Essayons 'gauche JOIN' ici plutôt que d'un' INNER JOIN'. Je vais éditer. – NickHeidke
retourne toujours seulement 1 ligne avec la date la plus élevée – user583576