小时用户数

时间:2014-11-27 10:09:13

标签: rdbms amazon-redshift

我需要在不同的时间找到用户的计数 例如:

表:

    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小时内。

如果解释不清楚,请回复我。

提前致谢

1 个答案:

答案 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)以涵盖感兴趣的范围。

基本上它的工作原理如下:

  • 创建一系列感兴趣的小时(假设时钟小时而不是用户小时)
  • 每个用户 - 小时组合列出一行
  • 按用户分组,以计算每个用户参与的小时数
  • 按小时计数分组,查看每个计数的使用数量