2013-03-12 36 views
0

当我在行上进行计数(代码#1) - 我得到大约880行的正确计数。MS-SQL:SQL“组”创建重复项?

当我按日期分组计数时,它突然增长大约100(代码#2)。

如果有人能帮助我理解我的问题,我将不胜感激!

在此先感谢!

这里是表结构:

tblApplicants: 

applicantID (index) |  ApplyingForYear (nvarchar) 
------------------------------------------------------ 
1       2013/14 
11       2013/14 
13       2013/14 
12       2013/14 
15       2013/14 
21       2012/13 


tblApplicantSchools_shadow: 

id (index) | applicantID | updated (datetime) | statusID (int) | schoolID (int) 
----------------------------------------------------------------------------------------------------- 
1     11     2012-09-24 00:00:00.000  3     2 
1     13     2012-10-24 00:00:00.000  4     2 
2     15     2012-11-24 00:00:00.000  3     4 
3     13     2012-03-24 00:00:00.000  4     3 
4     12     2012-09-24 00:00:00.000  4     1 
5     21     2012-11-03 00:00:00.000  5     2 
6     11     2012-09-04 00:00:00.000  4     4 

码#1(计数正确地):

select count(DISTINCT [tblApplicantSchools_shadow].applicantID) as TotalAppsPerWeek FROM tblApplicants 
INNER JOIN tblApplicantSchools_shadow ON tblApplicantS.ApplicantID = tblApplicantSchools_shadow.applicantID 
WHERE ApplyingForYear = '2013/14' and [tblApplicantSchools_shadow].statusID = 4 

代码#2(基,计数不正确地):

select DATEADD(ww,(DATEDIFF(ww,0,[tblApplicantSchools_shadow].updated)),0) AS Datesubmitted ,count(DISTINCT [tblApplicantSchools_shadow].applicantID) as TotalAppsPerWeek FROM tblApplicants 
INNER JOIN tblApplicantSchools_shadow ON tblApplicantS.ApplicantID = tblApplicantSchools_shadow.applicantID 
WHERE ApplyingForYear = '2013/14' and [tblApplicantSchools_shadow].statusID = 4 
group by DATEADD(ww,(DATEDIFF(ww,0,[tblApplicantSchools_shadow].updated)),0) 
order by DATEADD(ww,(DATEDIFF(ww,0,[tblApplicantSchools_shadow].updated)),0) 

期望结果:

Datesubmitted    TotalAppsPerWeek 
    ------------------------------------------------------- 
    2011-11-14 00:00:00.000 1 
    2012-09-24 00:00:00.000 1 
    2012-10-08 00:00:00.000 3 
    2012-10-22 00:00:00.000 2 
    2012-10-29 00:00:00.000 2 
    2012-11-05 00:00:00.000 2 
    2012-11-12 00:00:00.000 5 
    2012-11-19 00:00:00.000 26 
    2012-11-26 00:00:00.000 106 
    2012-12-03 00:00:00.000 353 
    2012-12-10 00:00:00.000 298 

FIDDLE CODE:http://sqlfiddle.com/#!3/3aa61/10

回答

0

我想这是因为distinct在第二个查询适用于一组,所以tblApplicantSchools_shadow.applicantID,那些在第一次查询不同[tblApplicantSchools_shadow].updated崩溃,算一个,但在第二查询他们没有,因为他们在不同的组。

1

您正在使用DISTINCTGROUP BY这两者都做同样的事情。你应该使用它们的一个

,如果你想使用GROUP BY

那就试试这个

GROUP BY tblApplicantSchools_shadow.applicantID 

在其已经被tblApplicantSchools_shadow.applicantID,所以我不分组第一个查询知道又为什么你组中的第二查询

编辑:

MySQL的延伸使用的G ROUP BY,以便您可以在SELECT列表中使用未列在GROUP BY子句中的非聚集列或计算。您可以使用此功能通过避免不必要的列排序和分组来获得更好的性能。例如,你不需要小组tblApplicantSchools_shadow.applicantID在下面的查询

In standard SQL, you would have to add tblApplicantSchools_shadow.applicantID to the GROUP BY clause. In MySQL, the name is redundant. 
+0

感谢。我需要的是独特的,因为可能有几个条目与具有'statusID = 4'的相同'applicantID' - 我只希望其中一个 - 每个申请人ID – kneidels 2013-03-12 09:18:27

+0

那么为什么你需要第二组? – 2013-03-12 09:28:02

+0

你是对的 - 这是我扔在一起的部分代码。我正在分组,以便我可以看到有多少申请人 - 在某一天。这样,我正在计数+日期,这里是实际的代码: 'select DATEADD(ww,(DATEDIFF(ww,0,[tblApplicantSchools_shadow] .updated)),0)AS Datesubmitted,count(DISTINCT [tblApplicantSchools_shadow] .applicantID)作为TotalAppsPerWeek' – kneidels 2013-03-12 09:43:40