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

MySQL łączy dwie tabele z maksymalną wartością na innym polu

Musisz użyć dwóch podzapytań w ten sposób:

SELECT a.cid, a.name, a.mobile, b.date, b.balance
FROM account a 
JOIN
(
    SELECT b1.* FROM balance b1
    JOIN
    (
      SELECT cid, MAX(Date) As maxDate
      FROM balance
      GROUP BY cid
    ) b2
    ON b1.cid = b2.cid
    AND b1.date = b2.maxDate
) b
ON a.cid = b.cid;

Wyjście:

CID NAZWA MOBILNY DATA SALDO
1 ABC 12345 20 września 2013 00:00:00+0000 300
2 XYZ 98475 21 września 2013 00:00:00+0000 600

Zobacz ten SQLFiddle

Edytuj

Jak omówiono w komentarzach, to zapytanie można również zapisać tylko z jednym podzapytaniem:

SELECT a.cid, a.name, a.mobile, b1.date, b1.balance 
FROM account a 
JOIN balance b1 ON a.cid = b1.cid     
JOIN (
    SELECT cid, MAX(Date) As maxDate 
    FROM balance 
    GROUP BY cid
) b2 
ON b1.cid = b2.cid 
AND b1.date = b2.maxDate

Zobacz dostosowane SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mogę wstawić datę w mySQL w formacie DD-Mon-YY?

  2. Udostępniony klucz podstawowy

  3. Nie znaleziono parametru @Name w kolekcji

  4. MySQL Wybierz wiersze przy pierwszym wystąpieniu każdej unikalnej wartości

  5. Przegląd replikacji między klastrami