sql-server - SQL Server 2008 R2 - 在 Lag / CTE 中考虑前一天 - 使用上一行或下一行的值
问题描述
我正在关注此人的教程“如何在 SQL Server 查询中使用上一行或下一行的值”。
这是他使用的主要查询:
;WITH UserActivityWRowNum(RowNumber, User, Activity, ActivityTime, ActivityDate)
AS
(
SELECT ROW_NUMBER()OVER(ORDER BY user, ActivityTime) RowNumber
,User
,Activity
,ActivityTime
,CAST(ActivityTime as DATE) as ActivityDate
FROM dbo.UserActivity
SELECT LogOns.User, LogOns.ActivityDate
,LogOffs.ActivityTime LogOff
,LogOns.ActivityTime LogOn
, DATEDIFF(minute, LogOffs.ActivityTime, LogOns.ActivityTime) IdleTime
FROM (SELECT * FROM UserActivityWRowNum WHERE Activity='LogOn') LogOns
JOIN (SELECT * FROM UserActivityWRowNum WHERE Activity='LogOff') LogOffs
ON LogOffs.RowNumber=LogOns.RowNumber - 1
AND LogOffs.User - LogOns.User
AND LogOffs.ActivityDate - LogOns.ActivityDate
我试图考虑用户在两天之间有登录/注销周期的天数。这使得计算每天的总空闲时间变得困难。本质上,我如何考虑跨越两天的注销/登录周期并给出特定日期的总空闲时间?每个用户每天的总空闲时间是链接中所述的预期输出
例如,下图显示了第 6 行的注销活动。因此从技术上讲,用户在当天剩余的 7 小时内处于空闲状态(2013-01-01)。2013-01-02 将有一个虚拟注销作为显示为 2013-01-02 00:00:00 的第一个条目
解决方案
推荐阅读
- anylogic - AnyLogic 事件中的日异常
- c# - 如何使用 LINQ 获取 Json 类型对象的 IDS 列表
- json - Swift 4 - Json 解码器
- css - Boostrap 4 Carousel 视频控件在右侧幻灯片上消失
- vb.net - vb.net 访问文件夹被拒绝
- python - 极慢的计算
- mysql - 如果最后一行的字段满足子句或子查询结果等于0,则插入
- sql-server - 经常断开 mssql 服务器并收到诸如“核心转储”和有时“内存损坏”之类的错误
- spring-boot - 执行器的 Spring Boot 2 升级问题
- ios - 为什么我应该在 iOS 中创建 IPA 之前编辑 Info.plist 和 AppDelegate 文件?