我需要写一个查询,以了解有多少学生在第一期后退出。如果学生在场,我们不会存储记录,所以我不能说学生是否在第一期并且有6个缺席记录(我们有7个周期天)。我所拥有的只是下面架构中的信息。我写了一个我写的查询,但它不起作用。需要一些帮助,从这里去。
由于
Select student_id, Count(*) AS #ofPerAbsent
From Attend_Student_Detail
where School_Year='1112' and School_Number='0031'
and Absent_Date='2012-04-13' and Absent_Code IN ('ABU','ABX')
Group by Student_ID
Having count(*)<=6
ORDER BY #ofPerAbsent desc
答案 0 :(得分:0)
因此,您确定在第1期后退出学生的标准是Absent_Code或'ABU'还是'ABX'?
如果这个假设是正确的,那么您可以按如下方式查询,以获得符合该标准的每日学生人数......
SELECT COUNT(DISTINCT(Student_ID))
FROM Attend_Student_Detail
WHERE Absent_Code IN ('ABU','ABX')
GROUP BY Absent_Date
如果您愿意,可以在WHERE子句中进一步过滤到特定日期。
顺便提一下,你的架构对我来说没什么意义;所以,如果以上不是你想要的,你能不能再解释一下你的架构,我相信我可以提供帮助。
答案 1 :(得分:0)
从我可以收集到的内容中,您将需要计算所有缺席数量减去第一个时期之后的缺勤次数,所以我认为这样的事情应该有效。
SELECT
A.student_id,
(Count(A.student_id) - B.absences_after) as absences
FROM
attend_student_detail as A
LEFT JOIN (
SELECT
Z.student_id,
Count(Z.student_id) as absences_after
FROM
attend_student_detail as Z
WHERE school_year='1112' AND school_number='0031'
AND absent_date='2012-04-13' AND absent_code IN ('ABU','ABX')
AND absent_period <> "period one"
GROUP BY Z.student_id
) as B
ON B.student_id = A.student_id
GROUP BY A.student_id;