最近一次学生查询ID#和GPA

时间:2014-05-12 18:38:07

标签: sql sql-server

我遇到了较大查询的一部分问题。我需要在年底让学生获得最近的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  

1 个答案:

答案 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的表相关联,并执行任何聚合。