テーブル構造は次のとおりです。
tbl応募者:
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
私がする必要があるのは:
ApplyingForYear
'2013/14'を持つすべての応募者を取得しますtblApplicants
statusID
4の- 2 回以上表示されたとしても、1 回だけカウントしたい
tblApplicantschools_show
- 個別の応募者の数をグループ化します (上記のとおり) -
updated
日付の列で (週でグループ化)
したがって、上記のサンプル データに基づいて、3 つの行が表示されるはずです ( ApplicantID
13 が 2 回表示され、1 回だけ必要なため)。
結果は次のようになります。
Datesubmitted TotalAppsPerWeek
-------------------------------------------------------
2012-10-24 00:00:00.000 1
2012-09-24 00:00:00.000 1
2012-09-04 00:00:00.000 1
これは私がこれまでに持っているものです-しかし、結果は3行ではなく4行になります:(
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)
そして、ここにフィドルがあります:http://sqlfiddle.com/#!3/3aa61/42