Je moet group by alles zonder een aggregatiefunctie:
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
Als uw message verschilt per rij en u wilt group by candidate_id , dan mag u message niet gebruiken . In dat geval verwijder je het gewoon uit je selectielijst en heb je het niet meer nodig in je group by lijst. Hetzelfde geldt voor elk ander veld dat u niet gebruikt.
Onthoud dat wanneer u aggregatiefuncties gebruikt, u elk veld moet opnemen in een aggregatiefunctie of in de group by . Anders weet SQL niet uit welke rij de gegevens voor de geretourneerde rij moeten worden opgehaald.
Bijwerken:
Nadat je hebt gezien waarnaar je op zoek bent, is dit voldoende:
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
)