Mysql 我的SQL查询基于两列中的唯一记录检索4列

Mysql 我的SQL查询基于两列中的唯一记录检索4列,mysql,Mysql,嗨,我正在尝试为MySQL编写一个正确的查询,根据同一个表中的两列是唯一的,从4列(from、to、content、date或all,如果更容易的话)检索值。其思想是检索用户X仅发送和接收的最后一条消息的列表 桌子 我最后一次尝试: SELECT t1.* FROM (SELECT MAX(msg_id) AS nr, msg_from, msg_to FROM com_msg GROUP BY msg_from) AS t2 INNER JOIN com_msg t1 ON

嗨,我正在尝试为MySQL编写一个正确的查询,根据同一个表中的两列是唯一的,从4列(from、to、content、date或all,如果更容易的话)检索值。其思想是检索用户X仅发送和接收的最后一条消息的列表

桌子

我最后一次尝试:

SELECT t1.* FROM (SELECT MAX(msg_id) AS nr, msg_from, msg_to 
    FROM com_msg GROUP BY msg_from) AS t2 
    INNER JOIN com_msg t1 ON t1.msg_from=t2.msg_from AND t1.msg_id=t2.nr 
    WHERE t1.msg_to='sw1' OR t1.msg_from='sw1'
返回:

2| user1|sw1  |1|message2|2014-02-06
7| sw1  |user1|1|message7|2014-02-20
但只应返回:

7| sw1  |user1|1|message7|2014-02-20

如果我正确理解了您的问题,此查询将返回您需要的内容:

SELECT com_msg.*
FROM com_msg INNER JOIN (SELECT MAX(msg_id) max_id
                         FROM com_msg
                         WHERE 'sw1' IN (msg_from, msg_to)
                         GROUP BY
                           CASE WHEN msg_from!='sw1' THEN msg_from
                                ELSE msg_to END) m
     ON com_msg.msg_id = m.max_id
需要订购ID,否则应使用MAX(日期)


请参阅fiddle。

基本上,您需要用另一个查询将其包装起来,因为where子句将显示to或from与用户相等的记录。我不是MySQL大师,但您应该能够做到以下几点:

select top 1 *
FROM (
    SELECT t1.* FROM (
        SELECT MAX(msg_id) AS nr, msg_from, msg_to 
        FROM com_msg 
        GROUP BY msg_from
    ) AS t2 
    INNER JOIN com_msg t1 ON t1.msg_from=t2.msg_from AND t1.msg_id=t2.nr 
    WHERE t1.msg_to='sw1' OR t1.msg_from='sw1'
)
ORDER BY date DESC

这将根据日期返回结果中最近的条目

如果您正在查找上一封电子邮件返回的一条记录,如您的示例所示,这应该可以

Select TOP 1 msg_from, msg_to, msg_content, date
From com_msg
Where msg_from='sw1' OR msg_to='sw1'
ORDER BY msg_id DESC

我很困惑。。。您最初的帖子说,“我们的想法是检索一个列表,其中只包含用户X发送和接收的最后一条消息”,但您的示例只显示了一条消息。您想要一条消息还是两条消息?我想您是在寻找每次对话的最后一条消息?在这种情况下,它只是一个,但可能还有更多?感谢您的输入,很抱歉混淆它实际上只是最后一个消息,不管它是由用户X发送或接收的,之前尝试过TOP 1查询,但每次都会出现MYSQL错误
Select TOP 1 msg_from, msg_to, msg_content, date
From com_msg
Where msg_from='sw1' OR msg_to='sw1'
ORDER BY msg_id DESC