2014-05-12 3 views
0

У меня возникли проблемы с одной частью более крупного запроса. В конце года мне нужно получить студентов последнего последнего GPA. Это определяется последним термином, который они посещали в классе. ГПД хранятся в базе данных с помощью краткого описания сроков, а не подвижного gpa. У меня проблема с захватом последней записи термина для каждого студента. Мой запрос ниже, и мне нужно знать, как вытащить последний gpa, но самый последний термин, который каждый учащийся посещал в этом году. FYI Я работаю на сервере sql.запрос ID # и GPA от студентов в последний раз

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

Без полного понимания проблем, которые может создать ваша модель данных, я бы рекомендовал разделить это на несколько запросов.

Первый запрос должен определить последний семестр присутствовал на одного студента и хранить его в каком-то месте удобно, как стол переменной

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 и выполнять любые агрегации.

Смежные вопросы