我有这张桌子
因此,这是一个非常简单的消息表:消息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个小时,我一直在动脑筋,无法做到这一点。任何帮助将不胜感激!
答案 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给出最新消息以及未读消息总数。