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的Seconds_Behind_Master
May 18 MySQL
详解GaussDB for MySQL性能优化
May 18 MySQL
Mysql 如何实现多张无关联表查询数据并分页
Jun 05 MySQL
mysql优化之query_cache_limit参数说明
Jul 01 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
MYSQL 运算符总结
Nov 11 MySQL
mysql数据插入覆盖和时间戳的问题及解决
Mar 25 MySQL
MySql数据库 查询时间序列间隔
May 11 MySQL
单机多实例部署 MySQL8.0.20
May 15 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 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之第六天
2006/10/09 PHP
PHP提取中文首字母
2008/04/09 PHP
php操作excel文件 基于phpexcel
2010/07/02 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
jQuery Mobile 和 Kendo UI 的比较
2016/05/05 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
python利用platform模块获取系统信息
2020/10/09 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
生产部主管岗位职责
2014/01/06 职场文书
工作过失检讨书
2014/02/23 职场文书
投资意向书范本
2014/04/01 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
超详细Python解释器新手安装教程
2021/05/10 Python
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
利用Python判断你的密码难度等级
2021/06/02 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python