SQL中使用DISTINCT、CAST与GROUP BY去重FeedbackDT失败求助
解决FeedbackDT列DISTINCT去重及分组统计问题
我来帮你排查下问题所在~你的查询之所以达不到按日期去重统计的效果,核心问题出在GROUP BY的粒度不对,以及子查询里的DISTINCT用法有误。
问题分析
你当前的SQL里,GROUP BY (feedbackDateTime)是按完整的日期时间(包含时分秒)进行分组的,这意味着哪怕是同一天的不同时间点,都会被分成不同的组。而你在子查询里写的SELECT DISTINCT CAST(feedbackDateTime AS DATE)其实起不到去重作用——因为每个分组本身对应的就是唯一的feedbackDateTime,转成日期后每个分组的结果都是单个值,DISTINCT在这里毫无意义。
正确的查询写法
要实现按日期去重,并统计每天的反馈数量,你需要先把feedbackDateTime转换为日期类型,再按这个日期分组,同时统计该日期下的FeedbackID数量:
SELECT CAST(feedbackDateTime AS DATE) as FeedbackDT, COUNT(FeedbackID) as FeedbackCount FROM Feedback WHERE feedbackDateTime <= GETDATE() GROUP BY CAST(feedbackDateTime AS DATE)
补充说明
- 这里直接把
CAST(feedbackDateTime AS DATE)作为分组依据,确保同一天的所有记录都会被归为一组,自然就实现了日期的去重。 COUNT(FeedbackID)会统计每组(即每天)的反馈ID数量,如果FeedbackID不会为空,用COUNT(*)也可以达到同样效果。
内容的提问来源于stack exchange,提问作者domster




