时间差不超过15分钟的组行
我想将不超过15分钟的行分组。我喜欢看到用户何时登录并进行“会话”。时间差不超过15分钟的组行
表
Time
2016-11-15 11:37:34
2016-11-15 11:35:04
2016-11-15 11:21:11
2016-11-15 09:37:22
2016-11-15 09:27:01
2016-11-14 21:37:59
2016-11-14 21:33:35
2016-11-14 21:31:14
结果:
Start End
2016-11-15 11:21:11 2016-11-15 11:37:34
2016-11-15 09:27:01 2016-11-15 09:37:22
2016-11-14 21:31:14 2016-11-14 21:37:59
这是我当前的查询:
SELECT
ROUND(UNIX_TIMESTAMP(Time)/900) as Session
FROM workouts
GROUP BY Session
ORDER BY Session DESC
但它只组是在15分钟之间的所有行。
你一个GROUP BY在所有后不是......
SELECT x.*
FROM my_table x
LEFT
JOIN my_table y ON y.dt > x.dt
AND y.dt <= x.dt + INTERVAL 15 MINUTE
WHERE y.dt IS NULL;
编辑:
要回答这个问题修正,你可能会考虑这些方针的东西。它看起来要复杂得多,但事实上,它可能执行更快...
SELECT MIN(dt) start
, MAX(dt) end
FROM
(SELECT dt
, CASE WHEN @prev > dt - INTERVAL 15 MINUTE THEN @i:[email protected] ELSE @i:[email protected]+1 END rank
, @prev:=dt
FROM my_table
, (SELECT @i:=0,@prev:=null) vars
ORDER
BY dt
) a
GROUP
BY rank;
要看看它是如何工作的,它可能有助于自身
甜!是否有办法获得第一次会议? – user2673664
我想用一个联盟或其他联盟 - 但我建议你编辑你的问题,使其更清晰你以后。 – Strawberry
我刚刚更新了这个问题:) – user2673664
我不跑的子查询(一)什么是15分钟的时间间隔。我喜欢的是如果最后一行和当前行之间的差异不大于15分钟。我确实更新了这个问题 – user2673664
所有的ID都一样吗?如果是这样,为什么要打扰那个专栏? – Strawberry
@Strawberry我已删除id列。你有什么想法如何解决这个问题? – user2673664