2013-03-12 24 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