目前有张表sbxx记录着设备上线下线的时间字段有:id 为设备idsj为时间字段ljxx为设备连接信息怎么使用sql查询数据昨天在线时间
假设你的数据库表名为 sbxx,以下是查询昨天在线时间的 SQL 语句:
SELECT
id,
SUM(DATEDIFF(MINUTE, LAG(sj, 1, sj) OVER (PARTITION BY id ORDER BY sj), sj)) AS yesterday_online_time
FROM
sbxx
WHERE
sj >= DATEADD(DAY, -1, GETDATE()) AND
sj < GETDATE() AND
ljxx = 'online'
GROUP BY
id
解释:
-
使用
WHERE子句筛选出昨天(DATEADD(DAY, -1, GETDATE()))上线的记录。 -
使用窗口函数
LAG计算设备上一次上线时间和这次下线时间之间的时间差(单位为分钟)。 -
对于同一个设备(
PARTITION BY id),按照时间升序(ORDER BY sj)计算每次上线的时间差,并把它们相加。 -
使用
GROUP BY子句按照设备 ID 分组,计算每个设备昨天在线的总时间。
注意事项:
-
以上 SQL 语句的时间单位为分钟,如果需要换算成小时或其他时间单位,可以相应地修改查询语句。
-
以上 SQL 语句假设设备状态只有 online 和 offline 两种,如果设备状态有其他取值,需要相应地修改
ljxx = 'online'的条件。
原文地址: https://www.cveoy.top/t/topic/EMI 著作权归作者所有。请勿转载和采集!