Vous attrapez
- l'identifiant,
- la date la plus basse pour cet identifiant, et
- tout des noms qui vont avec.
D'autres bases de données (normales) n'autoriseront même pas cette requête. Ils vous obligeraient soit à utiliser une fonction d'agrégation pour name , ou ajoutez nom au group by
aussi bien. MySQL choisit à la place une valeur aléatoire, et voilà votre problème.
Pour résoudre ce problème, votre requête deviendra légèrement plus complexe :
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