Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gibt die Daten aus den Zeilen mit dem jüngsten Datum jeder einzelnen Kandidaten-ID zurück

Sie müssen group by alles, was keine Aggregatfunktion verwendet:

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 

Wenn Ihre message ist pro Zeile unterschiedlich und Sie möchten group by candidate_id , dann dürfen Sie message nicht verwenden . In diesem Fall entfernen Sie es einfach aus Ihrer Auswahlliste und Sie brauchen es nicht mehr in Ihrer group by aufführen. Dasselbe gilt für alle anderen Felder, die Sie nicht verwenden.

Denken Sie daran, dass Sie bei der Verwendung von Aggregatfunktionen jedes Feld entweder in einer Aggregatfunktion oder im group by enthalten müssen . Andernfalls weiß SQL nicht, aus welcher Zeile die Daten für die zurückgegebene Zeile abgerufen werden sollen.

Aktualisierung:

Nachdem Sie gesehen haben, wonach Sie suchen, wird dies den Zweck erfüllen:

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
       )