SQL 查询最近一天内每个用户的昨天在线时间总和
这段 SQL 语句的作用是查询最近一天内在线的每个用户的昨天在线时间总和。
具体的实现方法是:首先从表 sbxx 中筛选出符合条件的数据,即 sj 在最近一天内且 ljxx 为 'online' 的数据。然后通过 LAG 函数获取每个用户的上一次在线时间,计算出该用户的在线时间与上一次在线时间之差,即昨天在线时间。最后对每个用户的昨天在线时间求和,得到总的昨天在线时间。
具体的 SQL 语句解释如下:
SELECT
id, -- 查询 sbxx 表中的 id 列
SUM(DATEDIFF(MINUTE, LAG(sj, 1, sj) OVER (PARTITION BY id ORDER BY sj), sj)) AS yesterday_online_time -- 计算昨天在线时间总和,并将其命名为 yesterday_online_time
FROM
sbxx -- 查询 sbxx 表
WHERE
sj >= DATEADD(DAY, -1, GETDATE()) AND -- 筛选最近一天内的数据
sj < GETDATE() AND
ljxx = 'online' -- 筛选 ljxx 为 'online' 的数据
GROUP BY
id -- 按照 id 分组
说明:
LAG(sj, 1, sj) OVER (PARTITION BY id ORDER BY sj):用于获取每个用户的上一次在线时间。LAG函数返回当前行之前的一行数据,PARTITION BY id表示对 id 分组,ORDER BY sj表示按照 sj 列排序。DATEDIFF(MINUTE, ..., ...):用于计算两个时间之间的分钟差。SUM(...):用于对每个用户的昨天在线时间求和。DATEADD(DAY, -1, GETDATE()):用于获取前一天的日期。GETDATE():用于获取当前日期。
原文地址: https://www.cveoy.top/t/topic/lUB8 著作权归作者所有。请勿转载和采集!