我需要在不同的时间找到用户的计数 例如:
表:
start_time | end_time | user_id
----------------------------------------------------------
1) 2014-11-25 01:23:00 | 2014-11-25 06:37:01 | 254
2) 2014-11-25 01:54L33 | 2014-11-25 02:25:31 | 365
3) 2014-11-25 01:55:36 | 2014-11-25 02:26:32 | 547
4) 2014-11-25 05:16:21 | | 485
5) 2014-11-25 05:29:03 | 2014-11-25 06:32:46 | 123
必填结果:
time | count
--------------
1 | 3
5 | 3
应在间隔时间的计数中计算登录特定时间间隔的用户 例如:用户254以 1:23 登录并在 06:37 注销。计数应该在1,2,3,4,5,6小时内。
如果解释不清楚,请回复我。
提前致谢
答案 0 :(得分:0)
这是一个有效的查询,但它可能不是最有效的。
-- Count how many of each count quantity appears
select qty, count(*)
from
(-- Count the number of different hours for each user
select user_id, count(*) as qty -- Don't need user_id here, but helps debugging
from
( -- List every hour+user combination
select distinct hour, user_id
from
(-- List every hours over the period of interest
select '2014-11-24 00:00:00'::timestamp + generate_series(0,48)*interval '1 hour' as hour) periods
join flow ON (start_time < hour + interval '1 hour'
AND end_time > hour)
) hours
group by hours.user_id
) user_count
group by qty
您必须调整小时数(48)以涵盖感兴趣的范围。
基本上它的工作原理如下: