Я хочу расширить решение из: Время между двумя событиями
Учитывая следующую таблицу, я хочу иметь возможность найти разницу во времени при изменении действия с clear
на create
. Как видите, элемент может clear
несколько раз перед create
.
Кроме того, событие может происходить несколько раз для одного пользователя, и я хотел бы фиксировать разницу во времени каждый раз, когда оно происходит.
id | user_id | action | created_at
----+---------+--------+----------------------------
5 | 1 | clear | 2016-09-08 11:29:56
6 | 1 | create | 2016-09-08 11:30:00
7 | 2 | create | 2016-09-08 11:30:10
8 | 2 | clear | 2016-09-08 11:30:14
9 | 2 | clear | 2016-09-08 11:30:42
10| 2 | create | 2016-09-08 11:30:43
11| 2 | clear | 2016-09-08 11:30:47
12| 2 | create | 2016-09-08 11:30:55
Желаемый результат (изменения между id 5-6, id 9-10, id 11-12):
user_id | time_diff
---------+-----------------
1 | 00:00:03
2 | 00:00:01
2 | 00:00:08
Используя следующий код, я могу извлечь только самая последняя разница времени, а не все из них:
SELECT user_id,
MAX(CASE WHEN action = 'create' THEN created_at END) -
MAX(CASE WHEN action = 'clear' THEN created_at END) AS time_diff
FROM mytable
GROUP BY user_id
HAVING COUNT(*) >= 2