MYSQL查询可返回具有特定要求的分组结果

时间:2019-05-06 10:38:54

标签: mysql

我有这张桌子

enter image description here

因此,这是一个非常简单的消息表:消息ID( message_id ),消息发件人ID( sender_id ),发送消息时( time_stamp ),消息正文( message )以及是否已读取消息( is_read )。

我希望SQL返回每个发件人一条记录,其中包括sender_id,最后一条消息的time_stamp,最后一条消息的正文以及该发件人是否有任何未读消息。因此结果应如下所示:

发件人ID,last_time_stamp,last_message,has_unread_messages

换句话说,查询将为GROUP BY sender_id,因此每个发件人只有一条记录。该记录将包括最后一条消息的 sender_id time_stamp ,最后一条消息的正文以及发件人是否有未读消息。

过去3个小时,我一直在动脑筋,无法做到这一点。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

SELECT sender_id, time_stamp, message_body, is_read from messages where 
message_id IN ( SELECT MAX(message_id) from messages group by sender_id)

因为它会为每个发件人提供最后一条消息(如@Alpesh所述)而没有示例数据,所以要提供所需的确切查询并不容易。

另一个查询:

SELECT sender_id, time_stamp, message_body, has_unread_messages from messages 
INNER JOIN (SELECT sender_id, COUNT(1) AS has_unread_messages 
    FROM messages 
    WHERE is_read = 0 GROUP BY sender_id) AS senderUnread
    ON senderUnread.sender_id = messages.sender_id
WHERE message_id IN ( SELECT MAX(message_id) from messages group by sender_id)

它将根据sender_id给出最新消息以及未读消息总数。