如何针对日期时间列的日期部分统计去重计数?
解决方法:统计日期字段的唯一日期数量
核心思路是先把带时间戳的日期字段转换为纯日期格式,再对纯日期去重后统计。不同数据库的转换函数不同,以下是常用数据库的写法:
MySQL/MariaDB
使用DATE()函数提取日期部分:
SELECT xyz.ID, COUNT(DISTINCT DATE(xyz.RECEIVEDATE)) AS CountOfUniqueDates FROM xyz GROUP BY xyz.ID;
SQL Server
通过CAST或CONVERT将字段转为DATE类型:
SELECT xyz.ID, COUNT(DISTINCT CAST(xyz.RECEIVEDATE AS DATE)) AS CountOfUniqueDates FROM xyz GROUP BY xyz.ID;
或者用CONVERT语法:
SELECT xyz.ID, COUNT(DISTINCT CONVERT(DATE, xyz.RECEIVEDATE)) AS CountOfUniqueDates FROM xyz GROUP BY xyz.ID;
Oracle
用TRUNC()函数截断时间部分,仅保留日期:
SELECT xyz.ID, COUNT(DISTINCT TRUNC(xyz.RECEIVEDATE)) AS CountOfUniqueDates FROM xyz GROUP BY xyz.ID;
PostgreSQL
使用DATE()函数或CAST转换:
SELECT xyz.ID, COUNT(DISTINCT DATE(xyz.RECEIVEDATE)) AS CountOfUniqueDates FROM xyz GROUP BY xyz.ID;
关键说明
原查询失效是因为直接统计了带时分秒的时间戳,同一日期的不同时间会被判定为不同记录。上述写法先剥离时间部分得到纯日期,再通过COUNT(DISTINCT ...)统计每个ID对应的唯一日期数量,就能得到你需要的结果(比如示例中的3个不同日期)。
内容的提问来源于stack exchange,提问作者compto2017
相关产品推荐
相关产品推荐

