我有一张MySQL表格,每名学生都会注册一次。我想提出一个查询,以显示出生在yyyy的学生结束aaaa的nnn学生。我得到了这个查询工作很快,但是困扰我的部分是我在数据库中有一些重复条目,我需要从总计中拒绝。MySQL CrossTab并删除重复记录
这是我的查询到目前为止。而且,正如我所说的,我知道它允许重复数年。
SELECT COUNT(YEAR(birthdate)) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding
FROM Enrollment
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear
结果落得看起来像(如果我把一个WHERE子句来限制对特定学生):
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
鉴于我的where子句限制到一个学生,我所知道的2013项是数据库中的一个额外行的结果(和做对数据清理是不是一种选择,我们需要在查询中限制它)。
我试着做一个子选择给我一个独特的学生ID列表......但在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年。 –
我们再次需要源数据,因此我们可以清楚地看到查询如何产生输出。如果将当前的产出和预期产出放在一起,也很容易理解,因此我们可以发现问题所在。 –