mysql查询连续记录_mysql 查询连续对话_小Z笔记的博客-程序员宝宝

技术标签: mysql连续记录  Mysql  

案例:

最近遇到一个业务需求, 需要查找满足条件且连续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;
这里写图片描述

解决思路:

1. 对满足初次查询的数据赋予一个自增列b :
 select id,type,content,(@b:[email protected]+1) as b from cdb_labels a,(SELECT @b := 0) tmp_b where type=1;

这里写图片描述

2、用自增的id减去自增列b:
select id,type,content,( id-(@b:[email protected]+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1;

这里写图片描述

3、对等差列c分组, 并将分组的id组装起来:
select count(id),GROUP_CONCAT(id) from ( 
    select id,( id-(@b:[email protected]+1) ) as c from cdb_labels a,(SELECT @b := 0) tmp_b where type=1 
) as d GROUP BY c;

这里写图片描述

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

select if( count(id)>5 ,GROUP_CONCAT(id),null) e from ( 
    select id,( id-(@b:[email protected]+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

这里写图片描述

4、根据组装的id去找数据:
select id,type,content from cdb_labels,(

    select if( count(id)>5 ,GROUP_CONCAT(id),null) e from ( 
        select id,( id-(@b:[email protected]+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);

这里写图片描述

总结建议:

  1. MySQL的函数例如: GROUP_CONCAT() 的字符长度有限制(默认1024),如果连续记录较多会发生字符截取报错;
  2. 建议可以分步骤去查询,防止嵌套子查询,还可以提升性能而且避免使用MySQL函数;
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mathphp/article/details/80356788

智能推荐

python-sklearn学习笔记(一):训练模型的使用和预测数据的导出_sklearn模型导出_小火skr车的博客-程序员宝宝

这几天在机器学习中对sklearn引入数据,拆分数据,训练数据,测试数据,导出模型都有了一个大概的了解但是对于导出的模型如何去进行使用,让我产生了一些疑惑,当我解决这些疑问后,我发现是由于没有pandas的使用基础才导致了这些疑惑,所以建议小伙伴在学习sklearn之前,要能对pandas的使用有一个基本的了解这里讲一下我是怎么实现训练模型的导出和导入预测数据并将数据显示在原数据集...

ubuntu下的不能找到openssl/ssl.h问题_ssj125的博客-程序员宝宝

出现这样问题需要安装资源包sudo apt-get install libssl-dev安装之后就可以了

javax.servlet.ServletException: Servlet execution threw an exception异常的处理_哎呦脑壳疼的博客-程序员宝宝

在写spring的时候,发现了这个错误,在我的仔细寻找下,找到了答案检查你的web-inf是不是多了一个。我可能是多复制了 一个子目录

LINUX下MATLAB MEX编译的问题_linux matlab mex_zhuiqiuk的博客-程序员宝宝

最近跑一个程序,是matlab和c混合编程的,而且调用了一些Linux下特有的库文件,所以只能在linux下运行。但是ubuntu里安装的Matlab r2013a 出现了gcc版本问题。matlab r2013a只支持gcc4.4, 而ubuntu的gcc已经更新到4.8.2所以为了方便,只好安装4.4版的编译器, 包括gcc, g++, gfortran安装命令

黑马程序员 java String 笔记_大仁的博客-程序员宝宝

-------android培训 、java培训、期待与您交流! ----------基本数据类型对象包装类byte   Byteshort   Shortint Integerlong Longboolean   Booleanfloat Floatdouble Doublechar Character基本数据类型对象包装类的常见作用, 就是用于基

通信电平转换指南_74xhct_城南花已开..的博客-程序员宝宝

前言在我们电路设计中,常常会遇到通信电平转换的问题,在应用电平转换的措施之前还需要判断进行电平转换的必要性。如果你是用的是3.3V器件作为输出,而5V器件作为接收,那么这种低电平输出不会损坏器件,而且大部分3.3V器件输出高电平的时候也能够满足5V器件的高电平输入标准,这时候你就不需要电平转换。唯一需要注意的是如果外部5V器件需要从3.3V设备取电流的话,你需要查阅数据手册上对于接口拉电流...

随便推点

微信公众帐号开发教程第12篇-符号表情的发送(下)_\ue12f上_lizhengfa的博客-程序员宝宝

引言及文章概要第11篇文章给出了Unified版本的符号表情(emoji表情)代码表,并且介绍了如何在微信公众帐号开发模式下发送emoji表情,还在文章结尾出,卖了个关子:“小q机器人中使用的一些符号表情,在微信的符号表情选择栏里根本找不到,并且在上篇文章给出的符号表情代码表(Unified版)中也没有,那这些表情是如何发送的呢?”如下面两张图所示的符号表情“情侣”和“公共汽车”。

Kotlin学习笔记(九)协程简单概念与简单使用_job.join_zjuter的博客-程序员宝宝

1. 协程,就是任务调度框架,可以在一个线程里调度,也可以在一个线程池里调度。2. Kotlin的协程和RxJava一样的功能。至少协程有的,RxJava都有。3.协程和线程的相同点是,都一个“程”字,也就是说,都是要被执行的代码流。4.Kotlin协程的优点是,以“阻塞式的代码”实现“非阻塞式的代码”。都说比RxJava简单一些。.........

洛谷——P2347 NOIP 砝码称重(java实现)_KJ.JK的博客-程序员宝宝

题目描述设有1g1g、2g2g、3g3g、5g5g、10g10g、20g20g的砝码各若干枚(其总重\le 1000≤1000),输入输出样例输入 #1复制1 1 0 0 0 0输出 #1复制Total=3说明/提示【题目来源】NOIP 1996 提高组第四题import java.util.*; //P2347 [NOIP1996 提高组] 砝码称重public class Main { public static void main(String[]

详解SQL Server连接(内连接、外连接、交叉连接)_sqlserver内连接和外连接_程序猿小亮的博客-程序员宝宝

在查询多个表时,我们经常会用“连接查询”。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。什么是连接查询呢?    概念:根据两个表或多个表的列之间的关系,从这些表中查询数据。    目的:实现多个表查询操作。知道了连接查询的概念之后,什么时候用连接查询呢?     一般是用作关联两张或两张以上的数据表时用的。看起来有点抽象,我们举个例子,做两张表

[MAUI] 开篇-初识MAUI_微软maui_厦门德仔的博客-程序员宝宝

在2020年5月, 微软宣布了MAUI跨平台框架, MAUI 是Xamarin.Forms演变而来, 这也就意味着, 如果你原来具备Xamarin.Forms开发经验, 你可以流畅的过渡到MAUI开发当中。原本于2021年底发布的MAUI正式版被推迟到了2022年5月底发布。现在, 你目前可以通过安装VS2022 预览版进行安装MAUI开发选项。此版本中, 将不会存在Xamarin.Forms项目模板。

Linux学习入门--I/O标准库二_weixin_33736649的博客-程序员宝宝

为什么80%的码农都做不了架构师?>>> ...

推荐文章

热门文章

相关标签