select 消息列表中的最后一条消息怎么能像 whatsapp?

how can select last message from messages list like whatsapp?

我有两个表,tbl_msg和tbl_details。(如下图) 我想 select 每次聊天的最后一条消息,例如嵌入 SQL 的图像,例如 WhatsApp 和 Telegram 聊天列表。(sql 代码)。 请帮我。谢谢

这可能是一种选择:

select *
from tbl_msg a join tbl_msg_details b on b.msg_id = a.msg_id
where b.details_id = (select max(c.details_id)
                      from tbl_msg_details c
                      where c.msg_id = b.msg_id  
                     )

一种方法是window函数:

select md.*
from (select md.*,
             row_number() over (partition by msg_id order by time_st desc) as seqnum
      from tbl_msg_details md
     ) md
where seqnum = 1;

注意:您不需要 tbl_msg,除非结果集中有您想要的 table 列。

另外,不清楚“最后一条消息”是基于时间列还是id列。这使用时间列,但您当然可以使用 id,如果这是您对“last”的定义。

也许使用“分组依据”和“HAVING c.details_id = MAX(c.details_id)”最好不要?

像那样:

select *
from tbl_msg a join tbl_msg_details b on b.msg_id = a.msg_id
group by c.details_id
HAVING c.details_id = MAX(c.details_id)