是否有一个跟踪用户某些事件的表。
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
clear
CREATE TYPE user_actions AS ENUM ('create', 'clear');
现在,我想查询这两个动作之间的时间差,以获取用户create和之间的time_diff clear。
现在,您可以假定user没有多个条目(例如,至少一个create,最大另一个clear)。
user
我想要这样的结果:
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子句过滤掉user_id仅包含一个create动作的组,例如id=9OP中的with记录。
HAVING
user_id
id=9
演示在这里