如果有一个表来跟踪用户的某些事件。
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');
现在我想查询这两个 Action 的时间差,得到用户的create
和clear
之间的time_diff。
现在您可以假设 user
没有多个条目(例如,至少一个 create
和 maximal 另一个 clear
)。
我想要这样的结果:
user_id | time_diff
---------+-----------------
1 | 00:00:03.760349
2 | 00:00:04.110115
最佳答案
您可以使用以下查询:
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
子句过滤掉仅包含 create
操作的 user_id
组,例如带有 id=9
的记录在OP中。
关于sql - 两个事件之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39387712/