我有一个名为login_logs的postgresql表,其中包含以下字段:
日期,时间,用户名,ip_addr
我有以下SQL,它使登录大于或等于特定日期:
SELECT * FROM login_logs WHERE date>='2016-10-01'
但是,我想只获取用户名和日期列表,用户名在同一天有多个登录名。因此,例如,如果用户名具有两次或更多的条目,则应该返回该用户名,该日期包含当天登录次数的计数。因此,如果用户还有另外两个以上登录的日期,那么也应该显示用户名,日期和计数。
我有什么想法可以做到这一点吗?
答案 0 :(得分:3)
这样的事情可以解决问题:
SELECT
username,
COUNT(*) as count,
date_trunc('day', date) as day
FROM login_logs
WHERE date>='2016-10-01'
GROUP BY username, day
HAVING COUNT(*) > 1
我们按用户名和日期对登录两者进行分组,因为我们希望在同一天推断同一用户的登录组。然后,我们只保留具有多个条目的组。
答案 1 :(得分:0)
在Postgres中,您可以使用COUNT(DISTINC)
SELECT username, ip_addr, count(distinct date) as count_dates
FROM login_logs
GROUP BY username, ip_addr
WHERE date >= '2016-10-01';