我遇到了较大查询的一部分问题。我需要在年底让学生获得最近的GPA。这是由他们上课的最近一个学期决定的。 GPA通过术语汇总存储在数据库中,而不是滚动gpa。我在抓住每个学生的最新学期条目方面遇到了问题。我的查询如下,我需要知道如何提取最新的gpa,但是每个学生参加当年的最新学期。仅供参考我在sql server工作。
SELECT s.id,
Max (t.terms),
Max(t.gpa),
Sum(s.credits) AS systemCredits,
Sum(s2.credits) AS DegreeCredits,
Sum (s3.credits) AS trans_in
FROM (SELECT *
FROM student_courses
WHERE ( course_code IN ( 'a', 'b', 'c' ) )
AND grade IN ( 'a', 'b', 'c' )) s
FULL OUTER JOIN (SELECT *
FROM student_crs_hist
WHERE ( course_code IN ( 'a', 'b', 'c' ) )
AND grade IN ( 'a', 'b', 'c' )) s2
ON s.id = s2.id
AND s.years = s2.years
AND s.terms = s2.terms
JOIN (SELECT *
FROM stud_term_sum_div
WHERE years = '2013'
AND terms = (SELECT Max(terms)
FROM term_sum
WHERE years = '2013')) t
ON s.id = t.id
GROUP BY s.id
答案 0 :(得分:1)
如果不完全了解数据模型可能带来的挑战,我建议将其拆分为多个查询。
第一个查询应确定每个学生参加的最近一个学期并将其存放在方便的某个地方,如表变量
declare @recentSemester
table (semesterId int
, studentId int)
insert into @recentSemester
select
studentId
, max(semesterId)
from student_courses sc
left join student_crs_hist sch
on sc.id = sch.id
where sch.course_code in ( 'a', 'b', 'c' )
and sch.grade in ( 'a', 'b', 'c' )
group by studentId
第二个查询应该直接将此表变量与存储您学期GPA的表相关联,并执行任何聚合。