sql >> Database >  >> RDS >> Mysql

Selecteer het laatste bericht tussen de communicatie van twee gebruikers in 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)

Ik raad aan om een ​​unieke reeks-ID in uw tabel te gebruiken om externe GROUP BY te vermijden .Als u een oplopende unieke message_id heeft (d.w.z. grotere message_id komt overeen met latere sendtime ), zou de vraag veel eenvoudiger zijn:

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. Hoe kan ik een lijst met gebruikersaccounts krijgen via de opdrachtregel in MySQL?

  2. Bestelling van 'IN'-clausule behouden

  3. JSON-functies en -operators in SQLite (volledige lijst)

  4. MySQL:SyntaxError:Onverwachte id