SQL日期字段去重统计:计算每位销售代表的销售天数
SQL统计每位销售代表的不同销售天数
我们需要从存储销售代表姓名和销售日期时间的表中,统计每位销售代表有销售记录的不同天数。
原始表数据
| 销售代表姓名 | 销售日期 |
|---|---|
| A | 1/2/2022 2:03:32 PM |
| A | 1/2/2022 1:11:42 PM |
| A | 1/30/2022 5:25:53 PM |
| A | 1/30/2022 4:28:20 PM |
| B | 1/5/2022 3:15:22 PM |
| A | 1/12/2022 12:04:44 PM |
| B | 1/15/2022 5:15:43 PM |
预期结果
| 销售代表姓名 | 销售天数 |
|---|---|
| A | 3 |
| B | 2 |
解决方案
核心思路:按销售代表分组,提取销售日期的纯日期部分(忽略时分秒),对去重后的日期进行计数。
不同数据库的SQL实现:
- MySQL/MariaDB
SELECT `销售代表姓名`, COUNT(DISTINCT DATE(`销售日期`)) AS `销售天数` FROM 你的表名 GROUP BY `销售代表姓名`;
- SQL Server
SELECT [销售代表姓名], COUNT(DISTINCT CAST([销售日期] AS DATE)) AS [销售天数] FROM 你的表名 GROUP BY [销售代表姓名];
- Oracle
SELECT 销售代表姓名, COUNT(DISTINCT TRUNC(销售日期)) AS 销售天数 FROM 你的表名 GROUP BY 销售代表姓名;
- PostgreSQL
SELECT "销售代表姓名", COUNT(DISTINCT DATE("销售日期")) AS "销售天数" FROM 你的表名 GROUP BY "销售代表姓名";
逻辑说明
DATE()/CAST(... AS DATE)/TRUNC():从带时分秒的日期时间中提取纯日期,同一日期的不同时间会被转为相同值。DISTINCT:确保同一日期仅被计数一次。GROUP BY 销售代表姓名:按销售代表分组,得到每位代表的独立统计结果。
内容的提问来源于stack exchange,提问作者Anirban Das
相关产品推荐
相关产品推荐

