MySQL 获取连续范围

1、原始数据

2、把running_number转成数据,并加上一列有序数字

SELECT d.running_number+0 running_number,@a:[email protected]+1 rn FROM device_data d,(SELECT @a:=0) a
where d.device_id=13 order by d.running_number;

3、running_number与有序数据的差,差(diff)相同的的running_number说明是连续的

SELECT running_number,rn,running_number-rn diff
FROM
(SELECT d.running_number+0 running_number,@a:[email protected]+1 rn
FROM device_data d,(SELECT @a:=0) a where d.device_id=13) b;

4、根据差来分组,并获得相关差的最小及最大running_number,就形成了连续范围

select min(c.running_number) min,max(c.running_number) max
from
(SELECT running_number,rn,running_number-rn diff
  FROM
(SELECT d.running_number+0 running_number,@a:[email protected]+1 rn
FROM device_data d,(SELECT @a:=0) a where d.device_id=13)
 b)c group by diff;

5、参考《MySQL技术内幕:SQL编程》 2.6.2连续范围问题

时间: 2024-08-30 16:13:52

MySQL 获取连续范围的相关文章

Mysql获取连续的15天的销售数据

之前有做一个项目是关于亚马逊那块的erp.然后有一个需求是获取连续15天的销售信息,连续十五周的销售信息和连续12个月的销售数据做成图表统计;并且不连续的数据要将其补充完整,补充为0. 经过一番的百度和研究,最终写出来的SQL如下:(基本上我是没看懂) 在这之前先贴出我涉及到的三个项目表结构. 上图这个表中保存的是主要的销售报告信息. 这个表存放的是相应的卖家信息 这个表没啥用,你可以用任何一张数据在15条以上的表代替这张表,只是起一个参照作用而已,不查询其中的任何数据. 接下来上查询连续15天

mysql 获取当前日期及格式化[转]

MYSQL 获取当前日期及日期格式获取系统日期: NOW()格式化日期: DATE_FORMAT(date, format)注: date:时间字段format:日期格式 返回系统日期,输出 2009-12-25 14:38:59select now();输出 09-12-25select date_format(now(),'%y-%m-%d'); 根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01, ..., 59)%I, %i 两位数字形式的分( 00,

mysql 获取季度的第一天 本月的第一天,本周的第一天sql语句(转)

感谢:http://www.111cn.net/database/110/d45124323da8d2d87b80f78319987eda.htm 查看同主题的另一篇博客:http://blog.csdn.net/cleanfield/article/details/41447585 ------------------------------------------------------------------------------ 本季度的第一天 ,然后你可以把字符串再转换为日期. 方法

mysql获取group by的总记录行数方法

mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: 代码如下 复制代码 SELECT COUNT(*) from `table` WHERE ......; 查出符合条件的记录总数 代码如下 复制代码 SELECT * FROM `table` WHERE ...... limit M,N; 查询当页要显示的数据 这样的语句可以改成: 代码如下 复

MySQL获取Schema表名和字段信息

MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,UPDATE_TIME, CHECK_TIME from information_schema.TABLES where TABLE_SCHEMA='t_shop' ; 获取字段名 select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NUL

mysql 获取当前日期及格式化

MYSQL 获取当前日期及日期格式获取系统日期: NOW()格式化日期: DATE_FORMAT(date, format)注: date:时间字段format:日期格式 返回系统日期,输出 2009-12-25 14:38:59select now();输出 09-12-25select date_format(now(),'%y-%m-%d'); 根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01, ..., 59)%I, %i 两位数字形式的分( 00,

MySQL 获取某月所有的日期点

1.问题 如题目所说,通过MySQL获取某年某月所有的天数.如获取2014年2月的所有日期. 2.处理过程 2.1 创建一个数字辅助表 CREATE TABLE `nums` ( `key` int(11) NOT NULL, PRIMARY KEY (`key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数字辅助表'; 2.2 创建一个存储过程为数字辅助表增加数据 DELIMITER $$ CREATE DEFINER=`root`@`%`

MySql 获取当前节点及递归所有上级节点

-- MySql 获取当前节点及递归所有上级节点 -- 参数说明:resultField:查询返回字段,idd 要查询的资源ID值,idFieldName ID字段名,parentIdFieldName 上级ID字段名,tableName 表名,isContainMySelf 是否包含自己 DROP procedure IF EXISTS pro_getParentList; create procedure pro_getParentList(in resultField varchar(40

转: MYSQL获取更新行的主键ID

在某些情况下我们需要向数据表中更新一条记录的状态,然后再把它取出来,但这时如果你在更新前并没有一个确认惟一记录的主键就没有办法知道哪条记录被更新了. 举例说明下: 有一个发放新手卡的程序,设计数据库时常见的方案有两种: 方案一:使用一张表,新手卡和领取记录都在一起,这样主要字段就是新手卡(主键).用户ID(惟一).领取状态(非必要)等 这样的话数据库操作就简单了,直接一条update sql,将用户id更新到这张表里,然后根据用户ID再select出来就好了.但这样记录很多时就会有效率的问题,暂