Fir*_*n R 8 mysql sql database
所以我有一张表来跟踪建筑物内多个用户的移动情况.列显示用户的ID,他们所在的房间以及在该房间中找到他们的时间戳.该表如下所示:
user_id location time
------- -------- -------------------
1 room1 2018-05-18 03:20:00
1 room1 2018-05-18 03:21:15
1 room2 2018-05-18 03:22:07
2 room1 2018-05-18 03:24:20
2 room1 2018-05-18 03:27:55
2 room1 2018-05-18 03:29:09
1 room2 2018-05-18 03:32:37
1 room1 2018-05-18 03:34:41
1 room1 2018-05-18 03:39:28
Run Code Online (Sandbox Code Playgroud)
我要做的是总结每个房间每个用户多长时间的信息,如下所示:
user_id location duration(s)
------- -------- -----------
1 room1 75
2 room1 289
1 room2 630
1 room1 287
Run Code Online (Sandbox Code Playgroud)
有没有办法用一个查询来做到这一点?
您可以使用变量或相关子查询来处理此问题。变量通常更有效:
select user_id, location, min(time), max(time),
timestampdiff(second, min(time), max(time)) as duration
from (select t.*,
(@grp := if(@ul = concat_ws(':', user_id, location), @grp,
if(@ul := concat_ws(':', user_id, location), @grp + 1, @grp + 1)
)
) as grp
from (select t.*
from t
order by user_id, time
) t cross join
(select @ul := '', @grp := 0) params
) t
group by user_id, location, grp;
Run Code Online (Sandbox Code Playgroud)
这是一个带有工作代码的 SQL Fiddle。
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |