mysql - 用于排除 2 分钟内会话的 SQL 查询
问题描述
我正在尝试编写一个代码,该代码将删除每个 user_id 在同一天彼此相距 2 分钟内的任何整体。
例如这里是表:
用户身份 | 天 | 时间 |
---|---|---|
X | 1 | 00:55:54 |
X | 1 | 00:55:55 |
X | 1 | 00:56:01 |
X | 2 | 16:11:43 |
X | 2 | 16:12:01 |
X | 2 | 16:15:02 |
X | 2 | 16:30:07 |
X | 2 | 16:31:08 |
X | 2 | 16:40:09 |
X | 2 | 16:41:02 |
因此,如果在同一天有一些时间不超过 2 分钟,我想排除 2 个整体。
解决方案
您可以使用窗口函数来组合时间帧,然后仅过滤那些短于 120 秒的帧:
WITH frames AS (
SELECT
user_id, day, time AS start,
COALESCE(
LEAD(time) OVER(PARTITION BY user_id, day),
'23:59:59'
) AS final
FROM sessions
)
SELECT
user_id, day, start, final, TIMEDIFF(final, start) AS duration
FROM frames
WHERE TIMEDIFF(final, start) < 120
推荐阅读
- azure - Azure Kubernetes 容器环境变量
- clojurescript - 一系列未捕获的类型错误:“xxxx”不是从 Brave 浏览器中的 ClojureScript 编译的 JavaScript 中的函数
- excel - 在 Word 中的页面范围内进行 VBA 搜索
- sql - 在存储过程中使用 Like '%@mail%'
- sql - 如何在根架构中创建表
- arrays - Coldfusion:如何访问嵌套的结构数组
- xamarin.forms - 在 Xamarin Forms 中,如何停止在命令上加载 WebView?
- matlab - MATLAB中的以2为底的矩阵对数
- excel - 用 html p 标签括住文本的行
- javascript - mysql查询时间问题?