小编典典

两个事件之间的时间

sql

是否有一个跟踪用户某些事件的表。

 id | user_id | action |         created_at         
----+---------+--------+----------------------------
  5 |       1 | create | 2016-09-08 11:29:56.325691
  6 |       1 | clear  | 2016-09-08 11:30:00.08604
  7 |       2 | create | 2016-09-08 11:30:10.12857
  8 |       2 | clear  | 2016-09-08 11:30:14.238685
  9 |       3 | create | 2016-09-08 11:30:42.192843

总是有一个create动作,之后可能会有一个clear动作。

CREATE TYPE user_actions AS ENUM ('create', 'clear');

现在,我想查询这两个动作之间的时间差,以获取用户create和之间的time_diff clear

现在,您可以假定user没有多个条目(例如,至少一个create,最大另一个clear)。

我想要这样的结果:

 user_id |    time_diff    
---------+-----------------
       1 | 00:00:03.760349
       2 | 00:00:04.110115

阅读 165

收藏
2021-04-07

共1个答案

小编典典

您可以使用以下查询:

SELECT user_id,
       MAX(CASE WHEN action = 'clear' THEN created_at END) -
       MAX(CASE WHEN action = 'create' THEN created_at END) AS time_diff 
FROM mytable
GROUP BY user_id 
HAVING COUNT(*) = 2

HAVING子句过滤掉user_id仅包含一个create动作的组,例如id=9OP中的with记录。

演示在这里

2021-04-07