Wenn eine Tabelle vorhanden ist, die einige Ereignisse eines Benutzers verfolgt.Zeit zwischen zwei Ereignissen
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
Es gibt immer eine create
Aktion, die von einer clear
Taten folgen könnte.
CREATE TYPE user_actions AS ENUM ('create', 'clear');
Jetzt möchte ich den Zeitunterschied zwischen diesen beiden Aktionen abzufragen, um die time_diff zwischen dem create
und clear
eines Benutzers zu erhalten.
Für jetzt können Sie davon ausgehen, dass die user
nicht mehrere Einträge (z. B. mindestens eine create
und maximal eine weitere clear
) hat.
Ich möchte ein Ergebnis wie dieses haben:
user_id | time_diff
---------+-----------------
1 | 00:00:03.760349
2 | 00:00:04.110115
Vielen Dank. Das funktioniert großartig und genau das, wonach ich gesucht habe. Eine Sache, die ich nicht verstehe, ist, warum ich die 'MAX()' brauche. – Mark
@Mark 'MAX()' wird benötigt wegen der 'GROUP BY': jedes Feld der' SELECT'-Klausel, das nicht in der 'GROUP BY'-Klausel enthalten ist, muss innerhalb einer Aggregatfunktion verwendet werden. –
Danke, das ist gut zu wissen! Ich hatte dieses Problem einige Male in den letzten Tagen. Jetzt weiß ich, wie man das begehrt - großartig !!! – Mark