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

时间:2017-05-06 10:12:10

标签: mysql sql

拥有此私人聊天表 enter image description here

在我的留言页面上,我想显示最新的对话列表。列表就像是从 pc 发送消息到 pc2 并且 pc2 发送回 pc 然后它应该显示只有一行。

我试过了这个查询

SELECT id,col2,col3,col4    从yourtable    GROUP BY col2,col3;

Selecting distinct 2 columns combination in mysql

但它导致了

enter image description here

更新

我试过了这个查询

SELECT * FROM tbl_primessages frmid = 3466 OR toid = 3466 GROUP BY frmid,toid ORDER BY tbl_primessagestimestemp DESC

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

在SELECT中仅使用GROUP BY中的字段加上一些聚合函数(COUNT,AVG,MIN,MAX等)。

SELECT frmid, toid
FROM tbl_primessages
Where frmid = 3466 OR toid = 3466
GROUP BY frmid, toid