Трябва да group by
всичко, което не използва агрегатна функция:
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
Ако вашето message
е различно за всеки ред и искате да group by candidate_id
, тогава не трябва да използвате message
. В такъв случай просто го премахнете от избрания списък и няма да ви е нужен във вашата group by
списък. Същото важи и за всяко друго поле, което не използвате.
Не забравяйте, че когато използвате агрегатни функции, трябва да съдържате всяко поле или в агрегатна функция, или в group by
. В противен случай SQL няма да знае от кой ред да извлече данните за върнатия ред.
Актуализация:
След като видите какво търсите, това ще свърши работа:
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
)