sql >> Database teknologi >  >> RDS >> Mysql

Vælg den seneste besked mellem to brugeres kommunikation i 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)

Jeg anbefaler at bruge unikt sekvens-id i din tabel for at undgå ekstern GROUP BY .Hvis du har stigende unikt message_id (dvs. større message_id svarer til senere sendtime ), ville forespørgslen være meget enklere:

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. Kan jeg fortryde en transaktion, jeg allerede har begået? (tab af data)

  2. jQuery Valider fjernmetodebrug for at kontrollere, om brugernavnet allerede eksisterer

  3. MySQL Opret visning, Erstat visning og slip visningserklæringer med eksempler

  4. Node JS mysql database afbrydes