SQL 查询设备昨日在线时长
假设有一张名为 'sbxx' 的表,记录着设备多次上线下线的时间,字段包括:id(设备 ID)、sj(时间字段)、ljxx(设备连接信息)。现在需要使用 SQL 查询设备 ID 为 1234 昨天的在线时间,可以使用以下语句:
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。
原文地址: http://www.cveoy.top/t/topic/lUEZ 著作权归作者所有。请勿转载和采集!