Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

min(column) não está me retornando dados corretos de outras colunas


Você pega
  1. o código,
  2. a data mais baixa para esse ID e
  3. qualquer dos nomes que o acompanham.

Outros bancos de dados (normais) nem permitem essa consulta. Eles forçariam você a usar uma função agregada para nome , ou adicione nome para o group by também. O MySQL escolhe um valor aleatório e aí está o seu problema.

Para resolver isso, sua consulta se tornará um pouco mais complexa:
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