Postgresql按日期选择和计数

Postgresql按日期选择和计数,postgresql,Postgresql,我有一个名为login_logs的postgresql表,它有以下字段: 日期、时间、用户名、ip地址 我有以下SQL,可以获取大于或等于某个日期的登录: SELECT * FROM login_logs WHERE date>='2016-10-01' 但是,我只想得到用户名和日期的列表,其中一个用户名在同一天有多个登录名。因此,例如,如果一个用户名有一个条目两次或两次以上,那么它应该返回该用户名、日期以及当天的登录次数。因此,如果用户的另一个日期也有两次以上的登录,那么也应该显示用户

我有一个名为login_logs的postgresql表,它有以下字段:

日期、时间、用户名、ip地址

我有以下SQL,可以获取大于或等于某个日期的登录:

SELECT * FROM login_logs WHERE date>='2016-10-01'
但是,我只想得到用户名和日期的列表,其中一个用户名在同一天有多个登录名。因此,例如,如果一个用户名有一个条目两次或两次以上,那么它应该返回该用户名、日期以及当天的登录次数。因此,如果用户的另一个日期也有两次以上的登录,那么也应该显示用户名、日期和计数


你知道我该怎么做吗?

像这样的东西就可以了:

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
我们根据用户名和日期对登录进行分组,因为我们想对同一用户在同一天的登录分组进行推理。然后,我们只保留有多个条目的组。

在Postgres中,您可以使用


date
是列的坏名称。时间也是如此。顺便说一句:将日期+时间组合成时间戳并使用它更方便。
SELECT username, ip_addr, count(distinct date) as count_dates
FROM login_logs
GROUP BY username, ip_addr
WHERE date >= '2016-10-01';