Mysql 计算相邻两条记录的时间差

1 篇文章 0 订阅

为什么使用

项目中一个设备的数据每五秒发送一次写入数据库中
在这里插入图片描述
但是,如果设备损坏或者出现什么意外,没有传递信息。
这是,领导就说我要这个设备的工作时间段,就是两条数据之间的间隔超过一定时间后就是不同的时间段。
左思右想,可以用循环啊!!!
领导:不行!这然执行效率太慢了!
没办法只能,从新想办法,最终在网上找到了数据库的方法。

结果

首先我在这里将结果列出来
在这里插入图片描述

 select A.DeviceId,B.Time endTime,A.Time startTime
        from(
            select h.DeviceId, h.Time ,(@i := @i + 1) as ord_num from data_device_bdcard_history h,(select @i := 1) b where h.DeviceId = '410103000BDC0001' order by Time
        ) as A LEFT JOIN (
            select h.DeviceId, h.Time ,(@j := @j + 1) as ord_num from data_device_bdcard_history h,(select @j := 0) c where h.DeviceId = '410103000BDC0001'  order by Time
        ) as B on A.ord_num=B.ord_num
        WHERE TIMESTAMPDIFF(SECOND,A.Time,B.Time) > 5

当然这个时间段是有问题的,因为这个时间段是没有第一个开始时间和最后一个结束时间的。
这时,只要做一个小小的循环就可以了。
在这里我就不演示了,毕竟主要讲的是Mysql 计算相邻两条记录的时间差
在这里插入图片描述
在这里插入图片描述

select h.DeviceId, h.Time ,(@i := @i + 1) as ord_num from data_device_bdcard_history h,(select @i := 1) b where h.DeviceId = '410103000BDC0001' order by Time

select h.DeviceId, h.Time ,(@j := @j + 1) as ord_num from data_device_bdcard_history h,(select @j := 0) c where h.DeviceId = '410103000BDC0001'  order by Time

查询data_device_bdcard_history表(设备保存数据表),根据设备编号查、根据时间排序。
返回:设备ID,数据加入的时间,以及每一条数据添加的编号。一个从1开始 表B,一个从2开始表A
之后根据TIMESTAMPDIFF函数查询时间的差值。
如果在一个表中表B为上一条数据,表A下一条数据,
计算出差值之后判断是否超过规定时间段。
超过时间段,就将上一条数据作上一个时间段的结束时间,下一条数据作为下一个时间段的开始时间。
结果:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值