查找postgres中特定时间范围之间的ID数

时间:2015-10-16 07:25:09

标签: postgresql

我有一个在特定日期登录网站的ID列表。 我需要找到每个id从登录的初始日期到一年后登录的次数。 到目前为止,我的查询是:

select count(id), id, date 
from table 
where date >= (SELECT min(date) AS mindate from table) 
and date < (SELECT min(date) + interval '1 year' from table)
group by 2, 3

我确信它不对,因为它将count返回到所有id。 你有什么想法? 对不起,我是这些人的新手。

1 个答案:

答案 0 :(得分:1)

我的策略是首先计算每个 id群组的最短日期,然后使用原始WHERE中的条件将其重新连接到原始表格条款。这有效地删除了每个 id组的记录,这些记录不在您想要的范围内。在此之后,只需要一个简单的GROUP BY即可获得结果。

SELECT id, COUNT(id)
FROM table t1 INNER JOIN
(
    SELECT id, MIN(date) AS mindate
    FROM table 
    GROUP BY id
) t2
ON t1.id = t2.id AND t1.date >= t2.mindate
    AND t1.date < t2.mindate + INTERVAL '1 year'
GROUP BY id

请注意,我从date列表中删除了SELECT字段,因为将其包含在那里没有任何意义,因为它不是聚合(即Postgres不知道哪个< / em>您希望为每个id组显示的日期。