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多表查询-笔记七
Apr 05 MySQL
MySQL创建索引需要了解的
Apr 08 MySQL
MySQL 表空间碎片的概念及相关问题解决
May 07 MySQL
如何设计高效合理的MySQL查询语句
May 26 MySQL
Navicat连接MySQL错误描述分析
Jun 02 MySQL
浅谈mysql增加索引不生效的几种情况
Jun 23 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
Nebula Graph解决风控业务实践
Mar 31 MySQL
MySQL事务的隔离级别详情
Jul 15 MySQL
mysqldump进行数据备份详解
Jul 15 MySQL
MySQL中dd::columns表结构转table过程及应用详解
Sep 23 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
杏林同学录(四)
2006/10/09 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
JAVASCRIPT对象及属性
2007/02/13 Javascript
JavaScript中的Window窗口对象
2008/01/16 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
JavaScript实战之菜单特效
2016/08/16 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
python文件和目录操作函数小结
2014/07/11 Python
python中as用法实例分析
2015/04/30 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
Python字节单位转换实例
2019/12/05 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
Python中常见的数制转换有哪些
2020/05/27 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
介绍一下Python下range()函数的用法
2013/11/07 面试题
财务会计毕业生自荐信
2013/11/02 职场文书
合作协议书格式
2014/08/19 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书