In realta' group by prende il primo record che trova fisicamente nel db. Potrebbe essere qualunque. Se casualmente prende l'ultimo forse e' perche' hai cancellato dei record e gli ultimi inseriti hanno occupato il posto di quelli cancellati prima....

dovresti fare una subquery... dovrebbe essere cosi':

codice:
SELECT * FROM tabella 
WHERE id = ANY (SELECT MIN(id) FROM tabella group by relazione)
ovviamente se serve l'ultimo metterai MAX() al posto di MIN()