Mysql
 sql >> Datenbank >  >> RDS >> Mysql

min(Spalte) gibt mir keine korrekten Daten anderer Spalten zurück

Du greifst

  1. die ID,
  2. das niedrigste Datum für diese ID und
  3. beliebig der dazugehörigen Namen.

Andere (normale) Datenbanken erlauben nicht einmal diese Abfrage. Sie würden Sie zwingen, entweder eine Aggregatfunktion für name zu verwenden , oder fügen Sie Name hinzu zu group by auch. MySQL wählt stattdessen einen zufälligen Wert aus, und da ist Ihr Problem.

Um dies zu lösen, wird Ihre Abfrage etwas komplexer:

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)

Oder:

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