有一个表 表名字: 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
时间字段名字: 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