Postgres SQL for循环统计每月现有用户数

Postgres SQL for循环统计每月现有用户数,sql,Sql,我有一个用于用户注册时间的用户数据库: id, signup_time 100 2020-09-01 001 2018-01-01 .... 如何找到所有历史记录的每月现有用户?使用该月的最后一天作为截止日期,现有用户意味着如果我在7月的最后一天2020-07-31观察,该用户在2020-07-01之前已经注册。如果我在6月的最后一天2020-06-30观察到,该用户已经在2020-06-01之前注册 与其他语言中的for循环类似: observation_year_month_

我有一个用于用户注册时间的用户数据库:

id,  signup_time
100    2020-09-01
001    2018-01-01
....
如何找到所有历史记录的每月现有用户?使用该月的最后一天作为截止日期,现有用户意味着如果我在7月的最后一天2020-07-31观察,该用户在2020-07-01之前已经注册。如果我在6月的最后一天2020-06-30观察到,该用户已经在2020-06-01之前注册

与其他语言中的for循环类似:

observation_year_month_list = ['2020-04','2020-05','2020-06']

 for i in observation_year_month_list:
      
     if user signup_time  < i:
        monthly_existing_user_count+1
    
observation\u year\u month\u list=['2020-04'、'2020-05'、'2020-06']
对于观察年月清单中的i:
如果用户注册时间
然而,这是一个问题。SQL是一个循环,不使用循环。相反,您描述了所需的结果,数据库会给出一个实现该结果的方法

您的案例由来处理,以便将行聚合到组中。在这种情况下,按月使用。然后使用聚合函数计算每个组中的用户数

select
  count(id) as num_users,
  date_trunc('month', signup_time) as signup_month
from users
group by date_trunc('month', signup_time)