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

Wybierz ostatnią wiadomość między komunikacją dwóch użytkowników w mysql

SELECT data.* FROM 
(SELECT MAX(sendtime) AS sendtime 
         FROM data 
         WHERE 1 IN (sender,receiver)
         GROUP BY IF (1 = sender,receiver,sender)) AS latest
LEFT JOIN data ON latest.sendtime = data.sendtime AND 1 IN (data.sender, data.receiver)
GROUP BY IF (1 = data.sender,data.receiver,data.sender)

Zalecam używanie unikalnego identyfikatora sekwencji w swojej tabeli, aby uniknąć zewnętrznego GROUP BY .Jeśli masz zwiększający się unikalny message_id (tj. większy message_id odpowiada późniejszemu sendtime ), zapytanie byłoby znacznie prostsze:

SELECT data.* FROM 
(SELECT MAX(message_id) AS message_id 
         FROM data 
         WHERE 1 IN (sender,receiver)
         GROUP BY IF (1 = sender,receiver,sender)) AS latest
LEFT JOIN data USING(message_id)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL REPLACE :Jak zastąpić wszystkie wystąpienia znaku w każdym odrębnym podciągu rozdzielonym tym samym nagłówkiem i ogonem

  2. Czy zamknięcie połączenia mysql jest ważne?

  3. Jak zmienić domyślne sortowanie tabeli?

  4. Jak wstawić kolumny w określonej pozycji w istniejącej tabeli?

  5. Jak uzyskać identyfikator po wstawieniu do bazy danych MySQL za pomocą Pythona?