从一列SQL Postgres中的时间戳计算持续时间

时间:2018-11-10 17:55:15

标签: sql postgresql

我在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 UTCCalculate duration between timestamps in one column,并且已经进行了一些谷歌搜索,但距离没有任何距离。

谢谢!

1 个答案:

答案 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;

持续时间就是两者之间的差异-但确切的逻辑取决于您希望如何查看持续时间。