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
)