sql >> Databáze >  >> RDS >> Mysql

Vyberte poslední zprávu mezi komunikací dvou uživatelů v 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)

Doporučuji ve vaší tabulce použít jedinečné ID sekvence, abyste se vyhnuli externímu GROUP BY .Pokud máte zvyšující se jedinečné message_id (tj. větší message_id odpovídá pozdějšímu sendtime ), dotaz by byl mnohem jednodušší:

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. Sequelize bulkCreate() vrátí hodnotu NULL pro primární klíč

  2. Jak zakázat index v innodb

  3. Jak zřetězit text z více řádků do jednoho textového řetězce na serveru SQL Server

  4. #1221 - Nesprávné použití UPDATE a ORDER BY