Postgresql SELECT并按日期计算

时间:2017-02-04 15:13:01

标签: postgresql

我有一个名为login_logs的postgresql表,其中包含以下字段:

日期,时间,用户名,ip_addr

我有以下SQL,它使登录大于或等于特定日期:

SELECT * FROM login_logs WHERE date>='2016-10-01'

但是,我想只获取用户名和日期列表,用户名在同一天有多个登录名。因此,例如,如果用户名具有两次或更多的条目,则应该返回该用户名,该日期包含当天登录次数的计数。因此,如果用户还有另外两个以上登录的日期,那么也应该显示用户名,日期和计数。

我有什么想法可以做到这一点吗?

2 个答案:

答案 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';