2012-07-05 40 views
0

我需要編寫一個查詢來查找第一個時間段之後退出的學生人數。如果學生在場,我們不保存記錄,所以我不能說學生是否在場第一階段,有6個缺席記錄(我們有7個階段)。我所擁有的是以下模式中的信息。我有一個問題,我寫了,但沒有工作。需要一些幫助,從哪裏去。查詢查找有多少個學生退出

感謝

enter image description here

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 
+1

我猜你的abu和abx是無效的和可以原諒的缺席? – 2012-07-05 18:46:54

+0

如果他們退出,absent_period是否反映他們退出的期限?或者是他們錯過的那段時間?如果其中任何一種情況發生,您可以關閉該字段。 – JohnP 2012-07-05 18:49:27

回答

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子句中我喜歡。

你的模式對我來說沒有什麼意義,所以如果上述內容不是您要查找的內容,可以請您更詳細地解釋一下您的架構,我相信我可以提供幫助。

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;