mysql一对多查询取多的最新一条

该篇文章介绍了如何在MySQL8及以上版本中使用SQL查询来获取每个会话的最新消息,通过ROW_NUMBER()函数结合PARTITIONBY和ORDERBY对session_id和send_time进行排序,确保获取的是每会话的第一条消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELECT
	* 
FROM
	(
	SELECT
		cr.id,
		cr.session_id,
		cr.content,
		cr.send_time,
		ROW_NUMBER() over ( PARTITION BY cr.session_id ORDER BY cr.send_time DESC ) AS rowno 
	FROM
		tc_chat_record cr
		LEFT JOIN tc_chat_session cs ON cr.session_id = cs.session_id 
	) t 
WHERE rowno = 1

1,tc_chat_record为多表,tc_chat_session表为单表。

2,先排序send_time字段,parition by session_id 会根据字段进行分类排序,排序完后数据是rowno字段,默认为1开始,取第一条所以加了rowno=1条件。

注意:该sql作用于8的版本以上。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值