【发布时间】:2019-08-21 06:12:56
【问题描述】:
我有一个日志表来存储用户的登录/注销日志。我的目标是计算每个用户登录的次数和每次登录的登录时间。
我正在研究 PostgreSQL 数据库。日志表有log_id(PK)、user_id(FK)、login_state、created_time。 login_state 列是枚举类型,其值为“登录”或“注销”。
目前,我在 Log 表上使用了自联接,如下所示。
SELECT A.log_id, A.user_id, A.login_state, A.created_time, B.log_id, B.login_state, B.created_time, (B.created_time-A.created_time) elapsedtime
FROM logtable A INNER JOIN logtable B ON (A.login_state='login' AND B.login_state='logout')
WHERE (A.user_id=B.user_id) AND (A.created_time<=B.created_time);
我得到了一些正确的记录,但也有错误的记录。
我认为加入可能不是一个解决方案。对于每个登录实体,应该只匹配一个注销实体,但我无法为此编写正确的查询语句。
最好的结果可能是登录-注销对的集合以及每个用户的经过时间。
需要一些帮助。谢谢。
==============添加一些样本数据和预期结果=========
示例日志表
用于测试的 DB Fiddler https://www.db-fiddle.com/f/vz6EyKKTg6PWs1X4HbTspB/0
【问题讨论】:
-
请添加示例数据和预期输出。
-
@S-Man 好的,我添加了一些图像。预期结果是模拟图像。
-
请不要添加图片。我们无法复制数据进行测试。请添加可复制的代码或像这样的小提琴dbfiddle.uk/…
-
@S-Man 添加了! https://www.db-fiddle.com/f/vz6EyKKTg6PWs1X4HbTspB/0 请注意用户表被重命名为 myuser 表。
标签: sql postgresql