0

我需要写一个查询来了解有多少学生在第一期之后退出。如果学生在场,我们不会存储记录,所以我不能说学生是否在第一期出席并且有 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
4

2 回答 2

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;
于 2012-07-05T19:19:46.213 回答
0

因此,您确定学生在第一期后退出的标准是 Absent_Code 或“ABU”或“ABX”?

如果该假设是正确的,那么您可以进行如下查询以获取每天符合该条件的学生人数......

SELECT COUNT(DISTINCT(Student_ID))
FROM Attend_Student_Detail
WHERE Absent_Code IN ('ABU','ABX')
GROUP BY Absent_Date

如果您愿意,您可以进一步筛选 WHERE 子句中的特定日期。

顺便说一句,您的架构对我来说没有多大意义;因此,如果上述内容不是您要查找的内容,请您多解释一下您的架构,我相信我可以提供帮助。

于 2012-07-05T18:55:30.370 回答