Mysql
 sql >> Base de données >  >> RDS >> Mysql

min(column) ne me renvoie pas les données correctes des autres colonnes

Vous attrapez

  1. l'identifiant,
  2. la date la plus basse pour cet identifiant, et
  3. 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