【发布时间】:2021-06-28 09:15:41
【问题描述】:
我有两张表,tbl_msg 和 tbl_details。(如下图所示) 我想选择每个聊天的最后一条消息,比如嵌入SQL的图片,比如WhatsApp和Telegram聊天列表。(sql代码)。 请帮我。谢谢
【问题讨论】:
-
用您正在使用的数据库标记您的问题。
标签: sql phpmyadmin
我有两张表,tbl_msg 和 tbl_details。(如下图所示) 我想选择每个聊天的最后一条消息,比如嵌入SQL的图片,比如WhatsApp和Telegram聊天列表。(sql代码)。 请帮我。谢谢
【问题讨论】:
标签: sql phpmyadmin
这可能是一种选择:
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
)
【讨论】:
一种方法是窗口函数:
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,除非结果集中有您想要的表中的列。
此外,不清楚“最后一条消息”是基于 time 列还是 id 列。这使用时间列,但如果这是您对“最后”的定义,您当然可以使用 id。
【讨论】:
也许有一个“分组依据”和一个“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)
【讨论】: