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)
我有两个表,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)