mysql中 对于查询结果只显示n条连续行的问题#


在领扣上碰到的一个题目:求满足条件的连续3行结果的显示

  1. X city built a new stadium, each day many people visit it and the stats are saved as these columns: id, date, people
  2. Please write a query to display the records which have 3 or more consecutive rows and the amount of people more than 100(inclusive).
  3. For example, the table stadium:
  4. +------+------------+-----------+
  5. | id | date | people |
  6. +------+------------+-----------+
  7. | 1 | 2017-01-01 | 10 |
  8. | 2 | 2017-01-02 | 109 |
  9. | 3 | 2017-01-03 | 150 |
  10. | 4 | 2017-01-04 | 99 |
  11. | 5 | 2017-01-05 | 145 |
  12. | 6 | 2017-01-06 | 1455 |
  13. | 7 | 2017-01-07 | 199 |
  14. | 8 | 2017-01-08 | 188 |
  15. +------+------------+-----------+
  16. For the sample data above, the output is:
  17. +------+------------+-----------+
  18. | id | date | people |
  19. +------+------------+-----------+
  20. | 5 | 2017-01-05 | 145 |
  21. | 6 | 2017-01-06 | 1455 |
  22. | 7 | 2017-01-07 | 199 |
  23. | 8 | 2017-01-08 | 188 |
  24. +------+------------+-----------+

1.首先先进行结果集的查询

  1. select id,date,people from stadium where people>=100;

2.给查询的结果集增加一个自增列

  1. SELECT @newid:=@newid+1 AS newid,test.*
  2. FROM(SELECT @newid:=0)r, test WHERE people>100

3.自增列和id的差值 相同即连续

  1. SELECT @newid:=@newid+1 AS newid,test.* ,@cha:=id-@newid AS cha
  2. FROM(SELECT @newid:=0)r, test WHERE people>100

4.将相同的差值 放在同一张表中,并取出连续数量大于3的

  1. select if(count(id)>=3,count_concat(id),null)e from(
  2. SELECT @newid:=@newid+1 AS newid,test.* ,@cha:=id-@newid AS cha
  3. FROM(SELECT @newid:=0)r, test WHERE people>100)
  4. as d group by cha

5.将上步得到的表和主表 取得所需要的

  1. SELECT id,DATE,people FROM test,
  2. (SELECT IF (COUNT(id)>3,GROUP_CONCAT(id),NULL)e
  3. FROM (SELECT @newid:=@newid+1 AS newid,test.* ,@cha:=id-@newid AS cha
  4. FROM(SELECT @newid:=0)r, test WHERE people>100)AS d GROUP BY cha ) AS f
  5. WHERE f.e IS NOT NULL AND FIND_IN_SET(id,f.e);

听说还可以用存储过程来完成,不过我没尝试,稍后尝试

以上

MySQL查询显示连续的结果的更多相关文章

  1. mysql查询之 连续出现的数字,重复出现的邮箱,删除重复的电子邮箱

    1.编写一个 SQL 查询,查找所有至少连续出现三次的数字. +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | ...

  2. MySQL查询in操作 查询结果按in集合顺序显示(转)

    MySQL 查询in操作,查询结果按in集合顺序显示的实现代码,需要的朋友可以参考下. MySQL 查询in操作,查询结果按in集合顺序显示 复制代码代码如下: select * from test ...

  3. MySQL查询in操作 查询结果按in集合顺序显示_Mysql_脚本之家

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  4. MySQL 查询in操作,查询结果按in集合顺序显示

    MySQL 查询in操作,查询结果按in集合顺序显示   select * from test where id in(3,1,5) order by find_in_set(id,'3,1,5'); ...

  5. 命令行下更好显示 mysql 查询结果

    在 linux命令行中,直接进行 mysql查询时,有时查询的结果字段较多,显示的效果就很不友好: 但 mysql支持以另一种方式来显示结果,如下: 普通是 SQL 是以分号 ; 结束的,如果改为 \ ...

  6. mysql 查询结果显示行号

    mysql 查询时,不像oracle那样,可以直接用 rownum 显示结果行号. 可以用定义用户变量来实现 set @myrnum = 0; select (@myrnum := @myrnum + ...

  7. MySql查询进阶

    1.1 as关键字 用于 给显示结果中字段 或者 表 起别名 select 别名.字段名 from 表名 as 别名 where 条件语句 # 对字段起别名 select id as '编号', na ...

  8. Mysql 查询练习

    Mysql 查询练习 ---创建班级表 create table class( cid int auto_increment primary key, caption ) )engine=innodb ...

  9. 【转】mysql查询结果输出到文件

    转自:http://www.cnblogs.com/emanlee/p/4233602.html mysql查询结果导出/输出/写入到文件 方法一: 直接执行命令: mysql> select ...

随机推荐

  1. Jar命令用法

    JAR文件 JAR文件 全称:Java Archive File , 意思是Java档案文件.通常JAR文件是一种压缩文件,与常见的ZIP压缩文件兼容,通常被称为JAR包. JAR文件和ZIP文件的区 ...

  2. IOS 转场动画二和透明控制器视图

    一.透明视图控制器 WJListMenuViewController *VC = [[WJListMenuViewController alloc]init]; VC.modalPresentatio ...

  3. C# Func与Action总结

    Action:无参数无返回值委托. Action<T>:泛型委托,无返回值,根据输入参数的个数不同有十六个重载. Func< out T>:无输入参数,有返回值. Func&l ...

  4. Web 加入favicon

    一.点击    制作自己的favicon图标; 二.在网页head中加入: <link rel="shortcut icon" href="favicon.ico& ...

  5. 引入clipboard.js

    引入clipboard.js var clipboardJS = new ClipboardJS('#accept-data'); // 括号内的是选择器

  6. 【手撸一个ORM】第五步、Expression(表达式目录树)转换为Where子句

    说明 在SQL中,查询.修改比较常用到WHERE子句,在这里根据使用场景不同,定义了两个类,一个用于查询,一个用于修改(插入)操作.原因是: 查询操作支持一级导航属性查询,如student.Schoo ...

  7. NET Core学习方式(视频)

    NET Core学习方式(视频) ASP.NET Core都2.0了,它的普及还是不太好.作为一个.NET的老司机,我觉得.NET Core给我带来了很多的乐趣.Linux, Docker, Clou ...

  8. List和set集合:交集、差集、合集的区别retainAll,removeAll、addAll

    set .list集合的交集(retainAll).差集(removeAll)是没有区别的都是一样的. set .list集合的合集addAll是有区别的:set可以去重复:list不去重复 publ ...

  9. 【转】"超时时间已到。在操作完成之前超时时间已过或服务器未响应"的解决方法

    方法有以下三种: 1.原因应该在数据访问有问题,可以把连接时间设置长些,在数据库连接字符串,加上Connect Timeout=18000,单位毫秒 2,在web.config中加上以下语句: < ...

  10. 第十九章 排查和调试Web程序 之 防止和排查运行时问题

    1. 概述 常见的几种运行时问题包括 错误数据.慢于预期的响应.未知行为 或者 未处理的异常. Visual Studio 提供了 排查.跟踪 和 日志 等工具 来帮助排查系统的问题.有些情况还需要插 ...