السلام عليكم ورحمة الله وبركاته
لدي قاعدة بيانات فيها جداول منها جدول العلامات (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