Postgresql 在postgres中查找特定时间范围内的ID计数

Postgresql 在postgres中查找特定时间范围内的ID计数,postgresql,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 我确信这是不对的,因为它将

我有一个特定日期登录站点的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作为1返回给所有ID。 你有什么想法吗?
对不起,我对这些都不熟悉

我的策略是首先计算每个id组的最小日期,然后使用原始WHERE子句中的条件将其连接回原始表。这将有效地删除不在所需范围内的每个id组的记录。在此之后,只需简单的分组即可获得结果

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

请注意,我从选择列表中删除了日期字段,因为将其包含在其中没有任何意义,因为它不是一个聚合,即Postgres不知道每个id组要显示的日期。

否实际上是相同的。我认为问题在于它只使用我记录中的最小日期,而不是每个id的最小日期。虽然如果我删除日期,它确实会计算id的数量,但它仍然只返回第一年的值,而不是从他们首次登录到一年后的值。当我仅使用mindate和ids进行查询时,我得到了正确的结果,但在子句中它有不同的输出。@johnben我更新了我的答案。你最初没有把你的问题说得很清楚,我建议你继续努力,以便下次你能得到一个更好的答案。我真的很抱歉!!这是因为在我的查询中有两个问题。只是一个注释,外部查询中的id必须是t2.id,否则我得到的错误是id不明确,因为它不知道返回哪个。所以如果你想编辑它,以防万一将来有人读到它!不用担心……如果你已经知道确切的答案,你就不会发布:-