如何在给定日期范围内按年月去重统计首次注册的参与者人数
实现方案
核心逻辑
先提取每个参与者的首次注册日期,排除后续所有重复注册记录,再将首次注册日期格式化为年月维度分组计数即可。
通用SQL实现(以MySQL为例,表名假设为participant_reg)
SELECT DATE_FORMAT(first_reg_date, '%Y-%m') AS 'REGISTRATION DATE', COUNT(PARTICIPANT) AS 'COUNT' FROM ( -- 子查询获取每个参与者的首次注册日期 SELECT PARTICIPANT, MIN(`REGISTRATION DATE`) AS first_reg_date FROM participant_reg -- 若有指定日期范围过滤,可在此处添加条件,例如: -- WHERE `REGISTRATION DATE` >= '2017-01-01' AND `REGISTRATION DATE` < '2022-01-01' GROUP BY PARTICIPANT ) AS user_first_reg GROUP BY DATE_FORMAT(first_reg_date, '%Y-%m') ORDER BY `REGISTRATION DATE`;
其他主流数据库适配修改点
- PostgreSQL:将
DATE_FORMAT(first_reg_date, '%Y-%m')替换为TO_CHAR(first_reg_date, 'YYYY-MM'),带空格的字段名用双引号包裹 - SQL Server:将
DATE_FORMAT(first_reg_date, '%Y-%m')替换为FORMAT(first_reg_date, 'yyyy-MM'),带空格的字段名用方括号[]包裹
运行上述代码即可得到你给出的示例统计结果。
内容的提问来源于stack exchange,提问作者Makoy
相关产品推荐
相关产品推荐

