• 0
m_w_rose

الحصول على آخر علامات طالب معين

سؤال

السلام عليكم ورحمة الله وبركاته

لدي قاعدة بيانات فيها جداول منها جدول العلامات (Marks) وجدول الطالب (Student) و جدول الكورسات بمعنى أخر المواد (Course)

أريد الحصول على علامات طالب معين كلها في كل المواد لكن حصراً الأخيرة (لأنه ممكن أن يكون الطالب قدم مادة ما أو أكثر أكثر من مرة حسب العام الدراسي والفصل لكنني اريد أخر علامة حصل عليها وذلك حسب العام الدراسي و لفصل وليس بالضرورة أن يكون ناجح بها أو لا)

وللأسف رغم كل محاولاتي بأشكال عديدة تعطيني تعليمات ال select  كل العلامات للطالب وليس حصرا الأخيرة

أهم جدول هوالجدول العلامات يحتوي على الأعمدة التالية حسب الترتيب:

IDStudent = رقم ID الجامعي للطالب 

,IDCourse, = رقم ID الخاص بالمادة 

IDSemester, = رقم الفصل الدراسي (مثلاً الفصل الأول رقم ID حسب الجدول 1 - الفصل الثاني رقم ID حسب الجدول 2)

IDScholasticYear, = رقم العام الدراسي (مثلاً 2018-2019 رقم ID حسب الجدول 6)

IDYearStudy, = السنة الدراسية للمادة

PracticalMark, = علامة  القسم العملي

TheoreticalMark,= علامة  القسم النظري

,FinalMark  = العلامة النهائية (مجموع القسم العملي مع النظري)

Note = ملاحظات

بعض الكودات الخاصة ببعض التعليمات التي جربتها .

أرجو المساعدة ...

/*هنا فقط اسماء وليس الأرقام ولم أستطيع تنفيذ أي شرط لجلب أىخر مادة/*
/*OR*//*شغال وهو يحضر اسم الطالب واسم المادة مع العلامةلها ويرتبها حسب العاماة التي أخذت آخر مرة لكن يحضر كل العلامات*/
select stu.Name,cour.Course,m.FinalMark,sem.Semester,syear.ScholasticYear from Course cour
inner join Marks m
on m.IDCourse = cour.ID

inner join Student stu on 
stu.ID = m.IDStudent and m.IDStudent=1

inner join Semester sem on
sem.ID = m.IDSemester

inner join ScholasticYear syear on
syear.ID = m.IDScholasticYear

order by m.IDScholasticYear, m.IDSemester desc
/*OR*/

select distinct IDStudent,IDCourse,IDSemester,IDScholasticYear,IDYearStudy,PracticalMark,TheoreticalMark,FinalMark from 
)

SELECT IDStudent,IDCourse,IDSemester,IDScholasticYear,IDYearStudy,PracticalMark,TheoreticalMark,FinalMark FROM Marks 
WHERE IDStudent = 1
UNION
SELECT top 1 IDStudent,IDCourse,IDSemester,IDScholasticYear,IDYearStudy,PracticalMark,TheoreticalMark,FinalMark from Marks
WHERE ((Select COUNT(DISTINCT IDCourse) FROM Marks) > 1)
     ORDER BY  IDScholasticYear,IDSemester desc ) t

/*OR*/

 SELECT 
    IDStudent, IDCourse, IDScholasticYear, IDSemester, IDYearStudy, PracticalMark, TheoreticalMark, FinalMark, Note,
( select  top 1 IDCourse from Marks m2 WHERE
    m1.IDStudent = m2.IDStudent and m1.IDCourse = m2.IDCourse
        ORDER BY m2.IDScholasticYear, m2.IDSemester desc ) FROM Marks m1
WHERE
    IDStudent = 1
        ORDER BY IDScholasticYear, IDSemester desc

 

تم تعديل بواسطه m_w_rose
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

0 إجابة على هذا السؤال .

لاتوجد إجابات على هذا السؤال حتى الآن .

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .