Postgresql postgres:按行分组特定的24小时周期?

Postgresql postgres:按行分组特定的24小时周期?,postgresql,group-by,Postgresql,Group By,我正在参加9.6级的博士后考试。我有一个用户表: id | integer | | not null | nextval('user_id_seq'::regclass) name | character varying | | not null | 我有一个历史记录表格: actio

我正在参加9.6级的博士后考试。我有一个用户表:

 id                            | integer                     |           | not null | nextval('user_id_seq'::regclass)
 name                          | character varying           |           | not null | 
我有一个
历史记录
表格:

 actioned_by      | integer                     |           |          | 
 category         | character varying           |           | not null | 
 t_actioned       | timestamp without time zone |           | not null |     
我想要一种方法,用一个整数字段
num_days
来注释每个用户,该字段指示他们有多少不同的24小时活动周期

我知道如何获取每个用户活动的不同日历日数:

 SELECT d.actioned_by, COUNT(*) AS cnt FROM 
  (SELECT date_trunc('day', t_actioned) AS day, actioned_by 
   FROM history 
   GROUP BY day, actioned_by) d 
 GROUP BY actioned_by
 ORDER BY cnt DESC;
但是有没有一种方法可以测量这些时间段,从他们第一次行动的时间开始,允许人们在5分钟到午夜登录,10分钟后离开

我只是为了分析目的偶尔运行它,所以它是否慢并不重要。

A:使用窗口函数获取每个用户的第一个时间戳

B:获取行的当前时间戳和用户的第一个时间戳之间的差异。结果是一个间隔

C:将时间间隔转换为秒

D:将秒转换为天

E:从四舍五入到全天(减少数字)

F:添加1,因为您不需要天数的差异(一天内两个时间戳产生的天数==0),而是需要天数

测试数据:

actioned_by  t_actioned           
-----------  -------------------  
1            2018-09-08 23:55:00  
1            2018-09-09 00:10:00  
1            2018-09-10 00:05:00  
1            2018-09-10 00:15:00  
2            2018-09-09 20:15:00  
2            2018-09-10 02:15:00  
2            2018-09-10 08:15:00  
2            2018-09-10 14:15:00  
2            2018-09-10 20:14:00 
结果:

actioned_by  t_actioned           num_days  
-----------  -------------------  --------  
1            2018-09-08 23:55:00  1.0       
1            2018-09-09 00:10:00  1.0       
1            2018-09-10 00:05:00  2.0       
1            2018-09-10 00:15:00  2.0       
2            2018-09-09 20:15:00  1.0       
2            2018-09-10 02:15:00  1.0       
2            2018-09-10 08:15:00  1.0       
2            2018-09-10 14:15:00  1.0       
2            2018-09-10 20:14:00  1.0        

@没有名字的马不要认为这是重复的。在另一个问题中,问题是如何按一定的时间间隔分组。这里的问题略有不同:独立于行数计算间隔。
actioned_by  t_actioned           num_days  
-----------  -------------------  --------  
1            2018-09-08 23:55:00  1.0       
1            2018-09-09 00:10:00  1.0       
1            2018-09-10 00:05:00  2.0       
1            2018-09-10 00:15:00  2.0       
2            2018-09-09 20:15:00  1.0       
2            2018-09-10 02:15:00  1.0       
2            2018-09-10 08:15:00  1.0       
2            2018-09-10 14:15:00  1.0       
2            2018-09-10 20:14:00  1.0