Você pega
- o código,
- a data mais baixa para esse ID e
- qualquer dos nomes que o acompanham.
Outros bancos de dados (normais) nem permitem essa consulta. Eles forçariam você a usar uma função agregada para nome , ou adicione nome para o
group by
também. O MySQL escolhe um valor aleatório e aí está o seu problema. Para resolver isso, sua consulta se tornará um pouco mais complexa:
select
t.id,
t.mydate,
t.name
from
myTable t
where
t.mydate =
(select
min(td.mydate)
from
myTable td
where
td.id = t.id)
Ou:
select
t.id,
t.mydate as date,
t.name
from
myTable t
inner join
(select
td.id
min(td.mydate) as date
from
myTable td
group by
td.id) tx on tx.id = t.id and tx.date = t.mydate