Vous devez group by
tout ce qui n'utilise pas de fonction d'agrégat :
SELECT candidate_id, message, max(created_unix), jobpost_id, staffuserid
FROM messages
WHERE employer_id='$employerid' AND last='company'
GROUP BY candidate_id, message, jobpost_id, staffuserid
Si votre message
est différent par ligne et vous souhaitez group by candidate_id
, alors vous ne devez pas utiliser message
. Dans ce cas, supprimez-le simplement de votre liste de sélection et vous n'en aurez pas besoin dans votre group by
liste. Il en va de même pour tout autre champ que vous n'utilisez pas.
N'oubliez pas que lorsque vous utilisez des fonctions d'agrégation, vous devez contenir chaque champ soit dans une fonction d'agrégation, soit dans le group by
. Sinon, SQL ne saura pas de quelle ligne extraire les données pour la ligne renvoyée.
Mise à jour :
Après avoir vu ce que vous cherchez, ceci fera l'affaire :
SELECT candidate_id, message, max(created_unix), jobpost_id, staffuserid
FROM messages
WHERE employer_id='$employerid' AND last='company' AND
created_unix = (
SELECT max(subm.created_unix)
FROM messages subm
WHERE subm.candidate_id = messages.candidate_id
)