关于SQL,如果一个表中的某个字段有重复值,重复值我只取一个应该怎么做呢

我的数据库A表里有USERNAME和TIMESTR两个字段,现在我要统计12月分每个人提交日报的次数(有的人一天提交多次,但只能算作是一次。我现在的语句 是这样写的,
select username,count(*) from a
where datepart(month,timestr)=12
gorup by username
order by count(*)
这种写法的统计包涵了一天多于一次提交的数量。。求大侠们帮忙。。如何才能实现统计每天就一次的统计呢
感谢两位的回答,可是好像不对哦
我要显示的是一个月每人提交的总次数,但是若某一天有人交了3次,我也只算一次。。
仁兄,T1是什么意思哦。。我的SQL编程基础不是太扎实,能不能给我解释下呢。。谢谢

select username,count(*) from (select distinct username,timestr from a)t1
where datepart(month,timestr)=12
gorup by username
order by count(*)
用distinct吧,如果timestr 包含了时间,可以这样,
select username,count(*) from
(select distinct username,timestr=convert(varchar,timestr,112) from a)t1
where datepart(month,timestr)=12
gorup by username
order by count(*)
如果需要找每天都有的记录,可以加上having count(*) = 31
t1只是给 (select distinct username,timestr from a)这个查询起的别名,可以随便起,作用相当与把这个查询结果作为一个表名为t1的表来处理。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-11
用SQL嵌套比较好,SQL也比较清楚,
内层SQL,datepart(day,timestr)或convert 找到所有12月份,每个人提交日报的日期是每月的第几天,并生成一个字段,distinct确保只记录每天只保留一个 datepart(date,timestr)把每人的提交那一天找出来

外层SQL统计每个人有几天:
select username,count(*) from (select distinct username, datepart(dd,timestr) as userday from a
where datepart(mm,timestr)=12)
group by username本回答被提问者采纳
第2个回答  2011-01-18
select username,count(*) from a
where datepart(month,timestr)=12
group by username
having count(*) = 1
order by 2
第3个回答  2011-01-18
having count(*)= 1