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

min(kolonne) returnerer mig ikke korrekte data for andre kolonner

Du griber

  1. id'et,
  2. den laveste dato for dette id, og
  3. enhver af de navne, der hører til.

Andre (normale) databaser vil ikke engang tillade denne forespørgsel. De ville tvinge dig til enten at bruge en samlet funktion for navn , eller tilføj navn til group by såvel. MySQL vælger i stedet en tilfældig værdi, og der er dit problem.

For at løse dette vil din forespørgsel blive lidt mere kompleks:

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)

Eller:

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


  1. Hvordan Atand() virker i PostgreSQL

  2. Vælg om eksisterer andet indsæt?

  3. MySQL bruger ikke indeks til ORDER BY

  4. Finder du indlæg med tag1 OG tag2? (ved hjælp af en join-tabel) Eksisterer / Har / underforespørgsler... Hvad skal man bruge?