Innanzitutto, non dovresti sfuggire al nome della colonna con virgolette singole poiché non è una stringa letterale.
In secondo luogo, puoi eseguire sottoquery che ottengono separatamente l'ultima ora per ogni c_id
e uniscilo di nuovo alla tabella originale per ottenere le altre colonne.
SELECT a.*
FROM message a
INNER JOIN
(
SELECT c_id, MAX(time) time
FROM message
GROUP BY c_id
) b ON a.c_id = b.c_id AND
a.time = b.time
o
SELECT a.*
FROM message a
WHERE a.time =
(
SELECT MAX(time) time
FROM message b
WHERE a.c_id = b.c_id
)