如何用MS SQL统计各客户当月有记录的天数?
统计每个客户当月有记录的天数(MS SQL实现)
需求
编写MS SQL查询语句,统计数据集中每个客户在当月有记录的天数。
示例数据
DATE,ID,CUSTOMER 2023-02-01 00:30:00.000,1,A 2023-02-02 00:30:00.000,2,A 2023-02-03 00:30:00.000,3,A 2023-02-04 00:30:00.000,4,A 2023-02-01 00:30:00.000,5,B 2023-02-01 00:30:00.000,6,B 2023-02-01 00:30:00.000,7,B 2023-02-01 00:30:00.000,8,B 2023-02-02 00:30:00.000,9,A 2023-02-03 00:30:00.000,10,A
预期输出
Customer, Count A,4 B,1
解决方案
核心思路是先提取日期的纯日期部分(去除时间),再对每个客户的日期去重后统计数量:
SELECT CUSTOMER AS Customer, COUNT(DISTINCT CAST([DATE] AS DATE)) AS [Count] FROM YourTableName -- 替换为你的实际表名 WHERE YEAR([DATE]) = 2023 -- 指定年份 AND MONTH([DATE]) = 2 -- 指定月份 GROUP BY CUSTOMER ORDER BY Customer;
说明
CAST([DATE] AS DATE):将带时间的日期字段转换为仅包含年月日的日期类型,确保同一天内的多条记录不会被重复计数COUNT(DISTINCT ...):对每个客户的去重日期进行统计,得到有记录的天数- WHERE子句:如果需要统计当前月份,可以替换为
YEAR([DATE]) = YEAR(GETDATE()) AND MONTH([DATE]) = MONTH(GETDATE()),自动适配当前年月
内容的提问来源于stack exchange,提问作者user18102903
相关产品推荐
相关产品推荐

