Mysql
 sql >> Database >  >> RDS >> Mysql

min(colonna) non mi restituisce i dati corretti di altre colonne

Afferri

  1. l'ID,
  2. la data più bassa per quell'ID e
  3. qualsiasi dei nomi che lo accompagnano.

Altri database (normali) non consentiranno nemmeno questa query. Ti costringerebbero a utilizzare una funzione di aggregazione per nome o aggiungi nome al group by anche. MySQL invece sceglie un valore casuale e c'è il tuo problema.

Per risolvere questo problema, la tua query diventerà leggermente più complessa:

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)

Oppure:

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