У меня есть таблица в MySQL, в которой учащиеся вошли каждый год, когда они зарегистрированы. Я хочу создать запрос, который покажет nnn ученикам, родившимся в yyyy, для окончания учебного года aaaa. Я получил этот запрос, работающий довольно быстро, но часть, которая меня толкает, состоит в том, что у меня есть несколько повторяющихся записей в базе данных, которые мне нужно отклонить от моих итогов.MySQL CrossTab и удалять дубликаты
Вот мой запрос. И, как я уже сказал, я знаю, что это позволяет дублировать ценности в течение нескольких лет.
SELECT COUNT(YEAR(birthdate)) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding
FROM Enrollment
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear
Результаты в конечном итоге выглядит как (если я ставлю в ИНЕКЕ, чтобы ограничить к конкретному студенту):
YearCount BirthYear AcadYearEnding
1 2007 2012
2 2007 2013
1 2007 2014
1 2007 2015
Это запрос с предложением WHERE, который сгенерировал данные выше. .. но я в конце концов удалю предложение WHERE, чтобы показать всех учеников, но без дубликатов записей для любого из студентов.
SELECT COUNT(YEAR(birthdate)) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding
FROM Enrollment
WHERE StudentId=16183
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear
Учитывая мое положение, где это ограничение на одного студента, я знаю, что запись 2013 является результатом дополнительной строки в базе данных (и делает очистку на данных не вариант, нам нужно чтобы ограничить его в запросе).
Я попытался сделать подвыбор, чтобы дать мне список уникальных идентификаторов учеников ... но в 2013 году он обнаружил, что идентификатор студента дважды, поэтому он все равно пересчитал его дважды.
Здесь исходные данные, которые генерируют неправильные результаты, потому что есть 2 записи на 2013:
RecId StudentId Birthdate AcadYearEnding
39885 16183 11/29/2005 2012
33768 16183 11/29/2005 2013
31020 16183 11/29/2005 2013
59508 16183 11/29/2005 2014
64054 16183 11/29/2005 2015
RECID является уникальным идентификатором для таблицы.
Вполне возможно, что то, что мне нужно следующее (но я был бы признателен кто-то подтверждения):
SELECT COUNT(YEAR(birthdate)) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding
FROM (SELECT DISTINCT(StudentId), birthdate, AcadYearEnding From Test) As Ed
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear
Можете ли вы показать нам пример данных и ожидаемый результат, прямо сейчас Не ясно, где дублируются данные. –
Данные, приведенные выше, представляют собой фактические выходные данные выборки после того, как я включил предложение where, которое ограничивало вывод одного студента. Когда вы смотрите только на одного студента, я должен иметь 1 в первом столбце за каждый год ... повторяющаяся строка - в 2013 году. –
Опять же нам нужны исходные данные, поэтому мы можем определить, как запрос выводит результат. Также легко понять, если вы поместили текущий вывод и ожидаемый результат, чтобы мы могли определить, где проблема. –