Mysql
 sql >> Baza danych >  >> RDS >> Mysql

min(kolumna) nie zwraca mi poprawnych danych z innych kolumn

Łapiesz

  1. identyfikator,
  2. najniższa data dla tego identyfikatora i
  3. dowolne z imion, które się z tym wiążą.

Inne (normalne) bazy danych nie pozwalają nawet na to zapytanie. Zmusiłyby cię do użycia funkcji agregującej dla nazwy lub dodaj nazwę do group by również. MySQL zamiast tego wybiera losową wartość i pojawia się Twój problem.

Aby rozwiązać ten problem, Twoje zapytanie stanie się nieco bardziej złożone:

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)

Lub:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LOAD DATA INFILE wstawiono tylko 1 rekord

  2. Jak zaktualizować kolumnę typu danych JSON w MySQL 5.7.10?

  3. MySQL Dołącz tam, gdzie nie istnieje

  4. Jak wyświetlić sortowanie serwerów w MySQL?

  5. Jak ręcznie zarejestrować niestandardowe funkcje SQL w aplikacji Spring Boot?