Debes group by
todo lo que no usa una función agregada:
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 su message
es diferente por fila y desea group by candidate_id
, entonces no debes usar message
. En ese caso, simplemente elimínelo de su lista de selección y no lo necesitará en su group by
lista. Lo mismo ocurre con cualquier otro campo que no esté utilizando.
Recuerde, cuando use funciones agregadas, debe contener cada campo en una función agregada o en group by
. De lo contrario, SQL no sabrá de qué fila extraer los datos para la fila devuelta.
Actualización:
Después de ver lo que estás buscando, esto hará el truco:
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
)