如何编写SQL按月份统计唯一contact_id的数量并生成结果表?
解决方案
适配主流数据库的查询语句
核心逻辑是按月份聚合数据并对联系人ID去重统计,以下是不同数据库的实现代码:
MySQL/MariaDB 版本
SELECT DATE_FORMAT(timestamp, '%Y-%m') AS Month, COUNT(DISTINCT contact_id) AS contactCount FROM your_table_name -- 替换成你的实际表名 GROUP BY DATE_FORMAT(timestamp, '%Y-%m') ORDER BY Month DESC;
PostgreSQL 版本
SELECT TO_CHAR(timestamp, 'YYYY-MM') AS Month, COUNT(DISTINCT contact_id) AS contactCount FROM your_table_name -- 替换成你的实际表名 GROUP BY TO_CHAR(timestamp, 'YYYY-MM') ORDER BY Month DESC;
关键逻辑说明
- 日期格式化:通过
DATE_FORMAT(MySQL)或TO_CHAR(PostgreSQL)将timestamp字段转换为YYYY-MM格式的月份字符串,对应结果表的Month列 - 去重统计:
COUNT(DISTINCT contact_id)避免同一联系人ID在当月多次出现被重复计数,确保统计的是当月唯一联系人数量 - 分组排序:
GROUP BY按格式化后的月份分组,保证每个月份仅返回一条统计结果;ORDER BY Month DESC让结果按时间从新到旧排列,若需从旧到新可改为ASC
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

