sql - 自引用表以匹配用户 ID 的先前记录
问题描述
我试图找到从 SQL 数据计算周期时间的最简单方法。在数据源中,我有唯一的站 ID、用户 ID 和日期/时间戳,以及他们正在执行的其他数据。
我想要做的是将表连接到自身,以便对于每个日期/时间戳,我得到: - 在 3 分钟内该用户 ID 的最近一个实例的日期/时间戳或 null - 这两个时间戳之间的差异(周期时间=记录之间的时间量)
这应该很简单,但我无法绕开它。有什么帮助吗?
解决方案
不幸的是,SQL Server 不支持窗口函数中的日期范围规范。我建议在这里横向加入:
select
t.*,
t1.timestamp last_timestamp,
datediff(second, t1.timestamp, t.timestamp) diff_seconds
from mytable t
outer apply (
select top(1) t1.*
from mytable t1
where
t1.user_id = t.user_id
and t1.timestamp >= dateadd(minute, -3, t.timestamp)
and t1.timestamp < t.timestamp
order by t1.timestamp desc
) t1
子查询在 3 分钟内为同一行带来最新的行user_id
(或空结果集,如果在该时间范围内没有行)。然后,您可以在外部查询中使用该信息来显示相应的timestamp
,并计算与当前查询的差异。
推荐阅读
- php - 使用PHP的随机可变长度bigint(8)数?
- angular - Angular 组件未按预期更新视图
- java - 如何使用抽象类中的值保存我的对象?
- javascript - Google API oauth2 refresh_token 在一定时间后失效
- c - fork() 导致 msgsnd() 无效参数
- java - 如何获取(Paths.get)一个文件名以某个字符开头的文件?
- python - 从类型列表的 Dataframe 列中提取值
- android - 在 OnePlus 上搜索蓝牙设备时未找到设备
- java - UI 观察 LiveData
- > 显示新添加和新删除的对象,但不显示更新或更改
- sql - SQL 函数在没有主键的表中列出列