应用场景大概是这样的:比如有很多消息流,这些消息来自不通的app,聚合在一个页面上,查看的时候不能让一个app的消息霸屏,所以就会类似于折叠功能,同一个app的消息只显示最多5条,再多的话,就要点进去看。这样整个首页上就可以看到很多app的消息,整体还是按照时间先后,但是某一个app连续的消息不会超过5条,可以出现a1,a2,a3,a4,a5,b1,b2,b3,b4,a6,a7这样间隔出现,但是连续的a只会最多出现5条。11年后重建了一次现场,数据如下:

执行 select a.msg_id, a.app_id, a.ctime from user_request as a where 3> (select count(*) from user_request where app_id = a.app_id and msg_id > a.msg_id) order by ctime desc;

以上为2022年12月5日补充

-----------------------------------------------------------------------------------------------------------------------------

select a.msg_id, a.com_id, a.data, a.ctime from sns_user_03.user_request_86 a where 5 > (select count(*) from sns_user_03.user_request_86 where uid=8880386 and com_id= a.app_id and msg_id > a.msg_id ) order by a.ctime;

上面的sql实现分组查询,每组最多显示5条记录,按照时间排序

select @rank:=0;

select msg_id, app_id, data, ctime, rank from ( select a.msg_id, a.app_id, a.data, a.ctime, if(@appid!=a.app_id,@rank:=@rank+1,@rank:=@rank) as rank, @appid:=a.app_id from sns_user_03.user_request_86 a where 5 > (select count(*) from sns_user_03.user_request_86 where uid=8880386 and app_id = a.app_id and msg_id > a.msg_id ) and @rank <= 4 order by a.msg_id desc ) `temp` where rank >2 and rank <=4;

上面实现取第3到第4组,每组5条记录,按时间排序

这只是单纯DB实现,在实际应用中,对于这样耗时的DB操作应当尽量避免,最好将数据cache出来,在逻辑层做这种复杂操作

mysql实现每组取前N条记录的sql,以及后续的组数据量限制相关推荐

  1. php sql跳过前四条数据,mysql实现每组取前N条记录的sql,以及后续的组数据量限制...

    select a.msg_id, a.com_id, a.data, a.ctime from sns_user_03.user_request_86 a where 5 (select count( ...

  2. SQL分组查询后取每组的前N条记录

    本文由 Leon 同学授权发布 这个公众号的关注者除了大部分是 Android 工程师之外还有部分后端以及前端同学,我鼓励也非常欢迎大家来投稿,其实我们并不需要把自己限定在某个领域,多学学其他语言也是 ...

  3. mysql 分组排序取前n_mysql分组排序取前N条记录的最简洁的单条sql ! | 学步园

    -- mysql分组排序取前N条记录的最简洁的单条sql. use test; drop table if exists test; create table test ( id int primar ...

  4. oracle 取前10条记录

    1.oracle 取前10条记录 1) select * from tbname where rownum < 11; 2) select * from (select * from tbnam ...

  5. mysql随机取出每个分组前2条记录

    mysql随机取出每个分组前2条记录 SELECT a.* FROMt_notary_business AS a,(SELECT GROUP_CONCAT(id order by rand()) AS ...

  6. 数据库读取前几条记录的SQL语句大全

    1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELECT FIRST N * FROM TABLEN ...

  7. [MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

    前言:         同事的业务场景是,按照cid.author分组,再按照id倒叙,取出前2条记录出来.         oracle里面可以通过row_number() OVER (PARTIT ...

  8. Oracle分组取前n条记录

    2019独角兽企业重金招聘Python工程师标准>>> create table cl_aa as select modi_staff_id,jm,count(*) numb fro ...

  9. 【Mysql】Sql分组查询后取每组的前N条记录

    目录 一.背景 二.实战解析 三.总结 一.背景 最近,在开发中遇到个功能需求.系统有个资讯查询模块,要求资讯按照卡片形式展示.如下图: 按照项目组展示卡片,每个项目组展示阅读量最多的TOP2. 需求 ...

最新文章

  1. 重定向后,如何通过浏览器返回定向之前的页面?
  2. iOS 访问权限设置
  3. 第三次冲刺阶段第五天
  4. 不重复,distinct
  5. xp java配置_WinXP系统Java配置环境变量的方法
  6. Presto性能调优的五大技巧
  7. sphinx的配置和管理
  8. Linuxqt制作文本编辑器_Python实操!速收藏!学习使用Python创建文本编辑器应用程序
  9. 安卓 获取rtsp流 截屏_华为手机这5种截屏方法,你都会用吗?现在知道也不亏...
  10. python 科研统计_Python科研统计作图Plotnine+Seaborn+matplotlib替代R ggplot2系列!(二)...
  11. Ubuntu18.04无法连接向日葵服务器的问题及解决
  12. 基于javaweb的旅游管理系统旅行平台(springboot+ssm)
  13. Qt QWidget视频上叠加文字
  14. pyecharts绘制地图
  15. 在c语言中是闰年的条件为,C语言如何判断是闰年,闰年判断条件?
  16. 用Kali进行ARP断网攻击
  17. 2022全新Java学习路线图动力节点(五)框架之路
  18. 爱了爱了!丰巢智能政务柜真的太实用了
  19. 多维数组变成一维数组
  20. Linux常用命令介绍

热门文章

  1. HDU5556 Land of Farms 最大独立集
  2. 添加视频的html语言,添加视频内容.html
  3. Python 拼图成心【大小,图数可调节】
  4. iPhone的全球之旅 读书笔记
  5. python二进制转八进制代码_Python二进制转八进制代码
  6. idea 使用gitee 和github 全能版
  7. 2.4.1 频分复用、时分复用 和 统计时分复用
  8. 频分复用、时分复用、码分复用的基本原理
  9. 从一次对话中学到的东西(Masscan 学习)
  10. librosa处理音频信号