mysql分组取用户的前3条数据


现有:user 用户表   user_msg 用户文章表

 

需求:批量取一定时间范围内注册的各个用户发表的前3条文章

 

select * from user_msg a where a.u_id in (SELECT id FROM `user` where rec_time>="2021-11-07")  and
(
  select count(id) from user_msg b where b.u_id in (SELECT id FROM `user` where rec_time>="2021-11-07")  and  b.u_id=a.u_id  and  b.id<a.id
)<3

ORDER BY a.rec_time desc;

 

理解:针对同一个用户,将user_msg分成a、b两个相同临时表,相互比对,取出满足a表中id比b表id大的并且大的数量小于3条的记录。

假如两个表都是升序排列(方便理解),a表第4条的id肯定比b表的前三条id大,count以后应该是3,以此类推,第N条就是N-1,

所以满足条件就是前三条。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM