目前有张表sbxx记录着设备多次上线下线的时间字段有:id 为设备idsj为时间字段ljxx为设备连接信息业务逻辑是使用ljxx中的在线时间减去设备上次离线时间累计总在线时长怎么使用sql查询数据昨天在线时间
假设需要查询设备id为1234昨天的在线时间,可以使用以下SQL语句:
SELECT
SUM(TIMESTAMPDIFF(SECOND, last_offline_time, sj)) AS online_time
FROM
(SELECT
id,
sj,
LAG(sj) OVER (PARTITION BY id ORDER BY sj) AS last_offline_time
FROM
sbxx
WHERE
id = '1234' AND DATE(sj) = DATE(NOW() - INTERVAL 1 DAY)) AS t
WHERE
last_offline_time IS NOT NULL;
解释:
- 内层查询筛选出设备id为1234,且时间是昨天的所有记录;
- 使用窗口函数LAG计算出每条记录前一条记录的时间,即设备上次离线时间;
- 外层查询计算在线时间,即当前记录的时间减去上次离线时间;
- 最后使用SUM函数累计所有在线时间。
注意,如果设备在昨天没有上线,那么查询结果会返回NULL。
原文地址: https://www.cveoy.top/t/topic/EPu 著作权归作者所有。请勿转载和采集!