我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql查询连续记录方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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:=@b+1) as b from cdb_labels a,(SELECT @b := 0) tmp_b where type=1;

这里写图片描述

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;

这里写图片描述

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;

这里写图片描述

注:为了方便区分,这里查询分组成员要大于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 

这里写图片描述

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的函数例如: GROUP_CONCAT() 的字符长度有限制(默认1024),如果连续记录较多会发生字符截取报错;
  • 建议可以分步骤去查询,防止嵌套子查询,还可以提升性能而且避免使用MySQL函数;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql查询连续记录方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQL怎么查询连续上涨 N 次的记录

小编今天带大家了解SQL怎么查询连续上涨 N 次的记录,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“SQL怎么查询连续上涨 N 次的
2023-06-03

SQL 如何查询连续上涨 N 次的记录

用SQL如何查询连续上涨N次的记录? 这个问题用SQL来做很难! SQL的理论基础是无序集合,早期SQL也没有次序的概念,需要用JOIN造出次序,连续上涨这种问题就非常困难。后来在SQL2003标准中加入了窗口函数,一定程度地缓解了这个问题,但解决连续上涨问题
SQL 如何查询连续上涨 N 次的记录
2017-02-21

SQL查询用户连续N天登录

业务中常见分析之一是分析用户连续登录使用情况,这也对应着SQL常见面试题——用户连续N天登录问题。我们假设现在有一张用户登录信息表user_login_info,表中字段有用户id(uid)、登录时间(login_
SQL查询用户连续N天登录
2024-09-02

MySQL自连接与子查询方式

目录1. 自连接2. 子查询(嵌套查询)2.1 子查询分类2.2 单行子查询示例1:查询不想毕业同学的同班同学2.3 多行子查询示例2:查询语文或英语课程的信息成绩3. 合并查询3.1 示例1:查询id=3或者名字为英文的课程总结1. 自连
MySQL自连接与子查询方式
2024-09-05

mysql怎么查询连续签到天数

要查询连续签到天数,可以通过以下步骤来实现:创建一个名为attendance的表,包含以下字段:id (int, 主键)user_id (int, 用户ID)date (date, 签到日期)插入签到记录数据到attendance表中:
mysql怎么查询连续签到天数
2024-04-09

MySQL重复记录怎么查询

可以使用GROUP BY和HAVING子句来查询MySQL中的重复记录。假设有一张名为table1的表,其中包含一个名为column1的字段。要查询重复记录,可以使用以下查询语句:SELECT column1, COUNT(*) as
MySQL重复记录怎么查询
2024-04-09

MySQL之多表查询自连接方式

目录一、引言二、实操总结一、引言自连接,顾名思义就是自己连接自己。自连接的语法结构:表 A 别名 A join 表 A 别名 B ON 条件 ...;注意:1、这种语法有一个关键字:join2、自连接查询可以是内连接的语法,可以是外
MySQL之多表查询自连接方式
2024-09-05

MySQL的连接方式和多表查询方法

本篇内容主要讲解“MySQL的连接方式和多表查询方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的连接方式和多表查询方法”吧!目录MySQL 内连接、左连接、右连接、外连接、多表查询
2023-06-20

编程热搜

目录