Musisz group by
wszystko bez funkcji agregującej:
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
Jeśli Twoja message
różni się w każdym wierszu i chcesz group by candidate_id
, nie możesz używać message
. W takim przypadku po prostu usuń go z listy wyboru i nie będziesz go potrzebować w swojej group by
lista. To samo dotyczy każdego innego pola, którego nie używasz.
Pamiętaj, że używając funkcji agregujących, musisz zawierać każde pole w funkcji agregującej lub group by
. W przeciwnym razie SQL nie będzie wiedział, z którego wiersza pobrać dane dla zwróconego wiersza.
Aktualizacja:
Po obejrzeniu tego, czego szukasz, to załatwi sprawę:
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
)