Mysql
 sql >> база данни >  >> RDS >> Mysql

Изберете последното съобщение между комуникацията на двама потребители в 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)

Препоръчвам да използвате уникален идентификатор на последователност във вашата таблица, за да избегнете външни GROUP BY .Ако имате нарастващ уникален message_id (т.е. по-голям message_id съответства на по-късен sendtime ), заявката би била много по-проста:

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 на Windows 10

  2. Най-добрият начин за обработка на голям (UUID) като първичен ключ на MySQL таблица

  3. Тези две функции излишни ли са за дезинфекция?

  4. NodeJS MySQL Dump

  5. MySQL и PHP параметър 1 като ресурс