这段 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():用于获取当前日期。
SQL 查询最近一天内每个用户的昨天在线时间总和

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

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