2015-03-29 3 views
0

У меня возникли проблемы с отображением данных из двух таблиц, используя то, что, по моему мнению, должно быть групповым методом. В настоящее время у меня есть таблица, содержащая зрачки, а другая, содержащая оценки (точки) каждый год и срок. Смотрите ниже:SQL для группировки максимум из двух столбцов

PupilID, FirstName, Surname, DOB 

GradeID, PupilID, SchoolYear, Term, Points 

Я хочу запросить обе таблицы и отображения всех учеников с их последней степени, это должно выглядеть для максимального учебного года, то максимальный срок, и отображения точек наряду с PupilID, FirstName и фамилия.

Я был бы признателен за любую помощь, кто может предложить с этим

+0

Это известно как проблема [tag: наибольшая n-на-группу]. [Есть много дубликатов] (http://stackoverflow.com/questions/176964/select-top-10-records-for-each-category). –

ответ

1

Это будет выбрать последний класс на одного ученика, основанный на SchoolYear и Term

select * from (
    select p.*, g.schoolyear, g.term, 
     row_number() over (partition by PupilID order by SchoolYear desc, Term desc) rn 
    from pupils p 
    join grades g on g.PupilID = p.PupilID 
) t1 where rn = 1 
+0

При попытке этой ошибки возникает следующая ошибка: Неверный синтаксис рядом с ключевым словом «где». – user1711657

+1

@ user1711657 забыл псевдоним 't1'. попробуйте еще раз – FuzzyTree

+2

Чтобы избежать неоднозначной ошибки имени столбца, обновите инструкцию внутреннего выбора с помощью чего-то вроде этого выберите p. *, g.schoolyear, g.term, Пример рабочего кода на SQL Fiddle http://sqlfiddle.com/#!6/7b0db/2/0 – WorkSmarter

0

попробовать этот

declare varSchoolYear int 
declare vartrem int 
set varSchoolYear=(select max (SchoolYear) from Grade) 
set vartrem=(select max(term) from Pupil where SchoolYear=varSchoolYear) 

select a.firstname,b.idgrade 
from pupil a 
inner join grade b 
on a.pupilid = b.pupilid 
where b.term=vartrem and b.SchoolYear=varSchoolYear 
+0

Не совсем - это получает оценки за последний год/срок, но не последние оценки студентов (можете ли вы определить разницу?). –

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