mysql如何查询连续记录


Posted in MySQL onMay 11, 2022

案例

最近遇到一个业务需求, 需要查找满足条件且连续3出现条以上的记录。

表结构:

CREATE TABLE `cdb_labels` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `type` int(11) NOT NULL DEFAULT '0' COMMENT '标签类型:1喜欢异性类型,2擅长话题',
  `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '标签内容',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8 COMMENT='标签内容';

所有数据:

SELECT * FROM cdb_labels WHERE type = 1;

mysql如何查询连续记录

解决思路

1.对满足初次查询的数据赋予一个自增列b

select id,type,content,(@b:=@b+1) as b from cdb_labels a,(SELECT @b := 0) tmp_b where type=1;

mysql如何查询连续记录

2.用自增的id减去自增列b

select id,type,content,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1;

mysql如何查询连续记录

3.对等差列c分组, 并将分组的id组装起来

select count(id),GROUP_CONCAT(id) from ( 
    select id,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1 
) as d GROUP BY c;

mysql如何查询连续记录

注:为了方便区分,这里查询分组成员要大于5(也就是连续出现超过5次的记录):

select if( count(id)>5 ,GROUP_CONCAT(id),null) e from ( 
    select id,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1 
) as d GROUP BY c;

那么得到的数据只有:9,10,11,12,13,14,15 

mysql如何查询连续记录

4.根据组装的id去找数据

select id,type,content from cdb_labels,(
    select if( count(id)>5 ,GROUP_CONCAT(id),null) e from ( 
        select id,( id-(@b:=@b+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1 
    ) as d GROUP BY c
) as f where f.e is not null and FIND_IN_SET(id , f.e);

mysql如何查询连续记录

总结建议

  • MySQL的函数例如: GROUP_CONCAT() 的字符长度有限制(默认1024),如果连续记录较多会发生字符截取报错;
  • 建议可以分步骤去查询,防止嵌套子查询,还可以提升性能而且避免使用MySQL函数;
MySQL 相关文章推荐
如何用Navicat操作MySQL
May 12 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
Oct 15 MySQL
MySQL面试题讲解之如何设置Hash索引
Nov 01 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
MySQL数据库 任意ip连接方法
May 20 MySQL
MySQL数据库之存储过程 procedure
Jun 16 MySQL
MySQL的意向共享锁、意向排它锁和死锁
Jul 15 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 MySQL
mysql 体系结构和存储引擎介绍
MySQL数据库 安全管理
May 06 #MySQL
Mysql 文件配置解析介绍
May 06 #MySQL
MySQL数据库中的锁、解锁以及删除事务
May 06 #MySQL
mysql性能优化以及配置连接参数设置
May 06 #MySQL
Mysql InnoDB 的内存逻辑架构
详细介绍MySQL中limit和offset的用法
May 06 #MySQL
You might like
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
咖啡的植物学知识
2021/03/03 咖啡文化
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
JavaScript Split()方法
2015/12/18 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
python实现解数独程序代码
2017/04/12 Python
pandas中去除指定字符的实例
2018/05/18 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
心灵点滴观后感
2015/06/02 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python