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 相关文章推荐
MySQL为id选择合适的数据类型
Jun 07 MySQL
详解MySQL多版本并发控制机制(MVCC)源码
Jun 23 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
面试被问select......for update会锁表还是锁行
Nov 11 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
MySQL中B树索引和B+树索引的区别详解
Mar 03 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
MySQL数据库事务的四大特性
Apr 20 MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
Sep 23 MySQL
详解MySQL的内连接和外连接
May 08 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
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
python进阶教程之词典、字典、dict
2014/08/29 Python
Python中AND、OR的一个使用小技巧
2015/02/18 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
python清除函数占用的内存方法
2018/06/25 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
Python字典的核心底层原理讲解
2019/01/24 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
Python中关于浮点数的冷知识
2019/09/22 Python
python小白学习包管理器pip安装
2020/06/09 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python