假设有一张名为 '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;

解释:

  1. 内层查询筛选出设备 ID 为 1234,且时间是昨天的所有记录;
  2. 使用窗口函数 LAG 计算出每条记录前一条记录的时间,即设备上次离线时间;
  3. 外层查询计算在线时间,即当前记录的时间减去上次离线时间;
  4. 最后使用 SUM 函数累计所有在线时间。

注意:

如果设备在昨天没有上线,那么查询结果会返回 NULL。

SQL 查询设备昨日在线时长

原文地址: http://www.cveoy.top/t/topic/lUEZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录