假设需要查询设备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;

解释:

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

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

目前有张表sbxx记录着设备多次上线下线的时间字段有:id 为设备idsj为时间字段ljxx为设备连接信息业务逻辑是使用ljxx中的在线时间减去设备上次离线时间累计总在线时长怎么使用sql查询数据昨天在线时间

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

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