首页 > 解决方案 > 用于排除 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 个整体。

标签: mysqldatetime

解决方案


您可以使用窗口函数来组合时间帧,然后仅过滤那些短于 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

推荐阅读