如何在SQL Server中计算用户唯一工作日期的天数总和?
计算SQL Server中用户的唯一工作天数
要实现统计用户唯一日期的工作天数总和,核心思路是提取日期的纯日期部分(忽略时间),然后按用户分组统计唯一日期的数量。下面分两种常见情况给出解决方案:
情况1:Date字段是datetime/datetime2类型
如果你的Date字段是SQL Server的日期时间类型,直接用CAST转换为DATE类型(仅保留年月日),再结合COUNT(DISTINCT)统计唯一值即可:
SELECT UserID, COUNT(DISTINCT CAST(Date AS DATE)) AS TotalDays FROM YourTableName -- 替换成你的实际表名 GROUP BY UserID;
代码解释:
CAST(Date AS DATE):把带时间戳的日期转换为纯日期格式,同一天的不同时间记录会被统一识别为同一个日期。COUNT(DISTINCT ...):确保只统计每个用户的唯一日期数量,避免重复计数。GROUP BY UserID:按用户ID分组,每个用户单独计算工作天数。
如果只需要查询特定用户(比如UserID=1),可以加上WHERE条件缩小范围:
SELECT UserID, COUNT(DISTINCT CAST(Date AS DATE)) AS TotalDays FROM YourTableName WHERE UserID = 1 GROUP BY UserID;
情况2:Date字段是字符串类型
如果你的Date字段是字符串格式(比如例子中的04.06.2018 10:45:11),需要先把字符串转换为DATE类型,这里用CONVERT函数并指定对应格式代码:
SELECT UserID, COUNT(DISTINCT CONVERT(DATE, Date, 104)) AS TotalDays -- 104对应dd.mm.yyyy格式 FROM YourTableName GROUP BY UserID;
格式代码说明:
SQL Server中104是对应dd.mm.yyyy格式的代码,如果你的日期字符串是其他格式(比如mm/dd/yyyy),需要替换为对应的格式代码(比如101)。
测试结果
用你提供的测试数据:
| UserID | Date |
|---|---|
| 1 | 04.06.2018 10:45:11 |
| 1 | 04.06.2018 17:15:11 |
| 1 | 05.06.2018 09:15:33 |
执行上述查询后,会得到期望的结果:
| UserID | TotalDays |
|---|---|
| 1 | 2 |
内容的提问来源于stack exchange,提问作者tylkonachwile
相关产品推荐
相关产品推荐

