Code Bye

mysql 按时间范围查询

有一个表 表名字:      table
时间字段名字:        time (YYYY-MM-DD HH:MM:SS)
数据字段名字:        data  (设备返回的信息如:通讯异常等)
设备编号字段名字:  id      (设备编号)
表的情况介绍:     这个表里面数据很多几百万条左右,本人列出了3个要用到的字段。
储存的设备编号也有很多。收到的信息大致是几秒钟一条。但是不确定有时候10秒钟一条数据
表存储的设备编号不是连续一个设备的,
例如:
time                     id                data
2017-2-23 16:05:33      15                 1
2017-2-23 16:05:38      18                 0.8
2017-2-23 16:05:39      14                 3.2
2017-2-23 16:05:45      15                 5.9
2017-2-23 16:05:58      12                 1.5

需要筛选:        id相同(同一个设备的信息),8个小时内,data的数据要持续大于1,否则就是异常。筛选出异常的信息。
这样的功能用sql可以实现么,需要遍历表怎么比较啊,一直没想出来怎么解决希望哪位高手不吝赐教。

解决方案

10

那意思岂不是只要有小于1的就报警?

40

SELECT * FROM TABLE A
WHERE A.time >= DATE_ADD(now(), INTERVAL -8 HOUR) AND A.data > 1 -- 8 小时内 data > 1
AND (
	-- 8 小时内,当前记录相同 id 的后续第一条记录的 data(time排序)
	SELECT B.data FROM TABLE B
	WHERE B.time >= DATE_ADD(now(), INTERVAL -8 HOUR)
		AND B.id = A.id
		AND B.time > A.time
	ORDER BY B.time
) > 1

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明mysql 按时间范围查询