首页 > 解决方案 > Postgres 查询每个用户超过 30 天的登录次数,每天只计算一次

问题描述

我正在编写一个查询来获取用户在过去 30 天内完成的登录次数。

问题是用户每天可以登录多次,但我只想每天计算一个条目。因此,用户的最大返回值为 30。

我可以在 Node 中执行此逻辑,但我很想看看它是否可以在查询中完成

下面是 PID、用户 ID、登录日期时间(按登录顺序)-“登录表”

9   1000000000  2020-12-08 14:01:56
10  1000000000  2020-12-08 14:01:56
8   1000000000  2020-12-09 14:01:56
20  1000000001  2020-12-09 14:04:48
19  1000000001  2020-12-09 14:04:48
18  1000000001  2020-12-09 14:04:48
7   1000000000  2020-12-10 14:01:56
6   1000000000  2020-12-11 14:01:56
16  1000000001  2020-12-11 14:04:48
17  1000000001  2020-12-11 14:04:48
5   1000000000  2020-12-12 14:01:56
24  1000000002  2020-12-12 14:05:46
4   1000000000  2020-12-13 14:01:56
15  1000000001  2020-12-13 14:04:48
14  1000000001  2020-12-13 14:04:48
26  1000000002  2020-12-13 14:05:46
25  1000000002  2020-12-13 14:05:46
3   1000000000  2020-12-14 14:01:56
13  1000000001  2020-12-14 14:04:48
1   1000000000  2020-12-15 14:01:13
2   1000000000  2020-12-15 14:01:56
11  1000000000  2020-12-15 14:01:56
12  1000000001  2020-12-15 14:04:48
21  1000000001  2020-12-15 14:04:48
23  1000000002  2020-12-15 14:05:46
22  1000000002  2020-12-15 14:05:46

查询 - 不确定如何在一天内多次登录时获得 1 个值。分组是行不通的。也许有一个 Windows 函数可以适应这种情况。

select * 
from dating.logins 
where 
    userid = 1000000000
    and datetime > NOW() - INTERVAL '30 DAY'
order by datetime;

标签: postgresqlselect

解决方案


那这个呢 :

select userid, 
  count(distinct date_trunc('day', datetime)) as  countLogins
from dating.logins 
where 
    userid = 1000000000
    and datetime > NOW() - INTERVAL '30 DAY'
Group by userId;

推荐阅读