Подвыбрать и Макс - PullRequest
       1

Подвыбрать и Макс

0 голосов
/ 20 февраля 2012

Хорошо, я пытался осмыслить это для лучшей части дня и до сих пор не могу понять, как структурировать этот отбор.

Данные, которые мне нужно сообщить, - это возраст для данного учащегося.Основные сгруппированы за последние 3 финансовых года.Каждый финансовый год имеет 3 семестра (лето, осень, весна).Мне нужно сгруппировать мой запрос по полям fiscalyear и agerange, а затем подсчитать отдельные идентификаторы студентов.

В настоящее время у меня есть это для моего оператора SQL:

Select COUNT(distinct StuID), AgeRange, FiscalYear

from tblStatic

where Campus like 'World%' and (enrl_act like 'REG%' or enrl_act like 'SCH%') 
    and StuMaj = 'LAWSC' and FiscalYear IN ('09/10', '10/11', '11/12')

group by FiscalYear, AgeRange

order by FiscalYear, AgeRange

Так что все в порядке, но это не соответствует моему количеству студентов за финансовый год.Причина в том, что люди могут пересекать возрастные диапазоны в течение финансового года и добавляет их в мой счет дважды.

Как я могу использовать подвыбор, чтобы разрешить эту дублирующую запись?Поле, которое я пытался получить, - это поле моего семестра, и я использую max, чтобы найти максимальный семестр в течение финансового года для данного учащегося.

Образец данных:

Count   AgeRange            FiscalYear
3           1 to 19             09/10
20          20 to 23            09/10
60          24 to 29            09/10
96          30 to 39            09/10
34          40 to 49            09/10
14          50 to 59            09/10
3           60+                 09/10
2           1 to 19             10/11
24          20 to 23            10/11
73          24 to 29            10/11
109         30 to 39            10/11
43          40 to 49            10/11
11          50 to 59            10/11
2           60+                 10/11
1           1 to 19             11/12
17          20 to 23            11/12
75          24 to 29            11/12
123         30 to 39            11/12
44          40 to 49            11/12
14          50 to 59            11/12
2           60+                 11/12

Решение:(Просто получил эту работу и произвел мои численность персонала, которые соответствуют тому, что они должны быть)

Select COUNT(distinct S.StuID), AR.AgeRange, S.FiscalYear
from tblStatic S
INNER JOIN
(   Select S.StuID, MIN(AgeRange) as AgeRange
    From tblStatic S
    Group By S.StuID) AR on S.StuID=AR.StuID

where Campus like 'World%' and (enrl_act like 'REG%' or 
enrl_act like 'SCH%')
and StuMaj = 'LAWSC' and FiscalYear IN ('09/10', '10/11', '11/12') 
group by S.FiscalYear, AR.AgeRange
order by S.FiscalYear, AR.AgeRange

1 Ответ

0 голосов
/ 21 февраля 2012

Замените возрастной диапазон каждого учащегося на его максимальный (или минимальный, если хотите) возрастной диапазон в этом финансовом году, , затем , подсчитайте их:

;
WITH sourceData AS (
  SELECT
    StudID,
    MaxAgeRangeThisFiscalYear = MAX(AgeRange) OVER
                                (PARTITION BY StudID, FiscalYear),
    FiscalYear
  FROM tblStatic
  WHERE Campus LIKE 'World%'
    AND (enrl_act LIKE 'REG%' OR enrl_act LIKE 'SCH%') 
    AND StuMaj = 'LAWSC'
    AND FiscalYear IN ('09/10', '10/11', '11/12')
)
SELECT
  FiscalYear,
  AgeRange = MaxAgeRangeThisFiscalYear,
  Count    = COUNT(DISTINCT StudID)
FROM sourceData
GROUP BY
  FiscalYear,
  MaxAgeRangeThisFiscalYear
ORDER BY
  FiscalYear,
  MaxAgeRangeThisFiscalYear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...