我在Postgres SQL中有一个数据库,其中包含有关浏览在线内容的用户的信息。我想计算每个浏览情节的浏览持续时间(短片是同一Action_ID的一个开始和一个停止操作),然后每个用户每天查看一次。 我可以通过User_ID和“操作”列来标识用户,以查看浏览开始和结束的时间。
因此,我一直想弄清楚如何而不是让每个动作仅具有持续时间,而使每个动作(开始和停止时间)只有两行?
Date_time User_ID Device_ID Action Action_ID Channel_ID
22/07/2016 00:10 id2 pc stop 123qwe gn3
22/07/2016 00:10 id5 pc start 345ert tm6
22/07/2016 00:10 id1 mob stop 567rfg uy6
22/07/2016 00:12 id1 mob start 567rfg uy6
22/07/2016 00:13 d3 pc stop 987yhn io9
我已经尝试过Calculate duration between momentjs timestamps in UTC和Calculate duration between timestamps in one column,并且已经进行了一些谷歌搜索,但距离没有任何距离。
谢谢!
答案 0 :(得分:0)
您可以将日期获取为:
select date_trunc('day', date_time) as theday, user_id, action_id,
min(date_time) filter (where action = 'start') as start_time,
max(date_time) filter (where action = 'stop') as stop_time
from t
group by theday, user_id, action_id;
持续时间就是两者之间的差异-但确切的逻辑取决于您希望如何查看持续时间。