Mysql
 sql >> Base de données >  >> RDS >> Mysql

Renvoie les données des lignes avec la date la plus récente de chaque candidat_id distinct

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
       )