mysql - 获取具有两列组合的唯一行

标签 mysql sql

拥有这张私有(private)聊天 table enter image description here

在我的消息页面上,我想显示最新的对话列表。如果我从 pc 发送消息到 pc2 并且 pc2 发送回 pc 那么它应该显示只有一行。

我试过这个查询

选择 id, col2, col3, col4 从你的 table GROUP BY col2, col3;

Selecting distinct 2 columns combination in mysql

但是结果是

enter image description here

更新:

我试过这个查询

SELECT * FROM tbl_primessages 其中 frmid = 3466 或 toid = 3466 GROUP BY frmid,toid ORDER BY tbl_primessages.timestemp DESC

更新 2 应该是两个最近的时间

最佳答案

下面的查询使用了最小/最大技巧将涉及同一对用户的消息分组在一起。然后,我们可以保留每对人的最新对话。

SELECT t1.*
FROM tbl_primessages t1
INNER JOIN
(
    SELECT
        LEAST(frmid, toid) AS frmid,
        GREATEST(frmid, toid) AS toid,
        MAX(timestamp) AS latest_ts
    FROM tbl_primessages
    GROUP BY LEAST(frmid, toid), GREATEST(frmid, toid)
) t2
    ON LEAST(t1.frmid, t1.toid)    = t2.frmid AND
       GREATEST(t1.frmid, t1.toid) = t2.toid  AND
       t1.timestamp = t2.latest_ts

此处演示:

Rextester

关于mysql - 获取具有两列组合的唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43819185/

相关文章:

java - 有什么方法可以使用 sql 计算 2 个表之间的匹配项吗?

mysql - SQL Join涉及3张表,怎么办?

mysql - CakePHP:在非 HABTM 关系上使用联接表

Python/Mysql 俄语插入

php - 应该将二对多数据关系视为多对多关系吗?

Mysql自加入使用groupby从第一个表返回的最大ID

mysql - 行插入数据后如何用触发器向列插入数据?

MySQL 时间戳

php - 比较不同表的数据

c# - 如何将 20 个 100mb CSV 文件批量插入 SQL Server