sql >> Databasteknik >  >> RDS >> Mysql

min(kolumn) returnerar mig inte korrekta data för andra kolumner

Du tar tag

  1. id:t,
  2. det lägsta datumet för det id:t och
  3. alla av namnen som hör till det.

Andra (normala) databaser tillåter inte ens den här frågan. De skulle tvinga dig att antingen använda en aggregerad funktion för namn , eller lägg till namn till group by också. MySQL väljer istället ett slumpmässigt värde, och där är ditt problem.

För att lösa detta kommer din fråga att bli något mer komplex:

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. hur man arbetar med rekursiv fråga i MySql?

  2. Räkna dubbletter av poster i Mysql-tabellen?

  3. java.lang.NullPointerException på com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:3005)

  4. Köra en mySQL-fråga som ett cron-jobb?