Насколько это близко к тому, что вы хотите?
create table your_data(
studentid number
,course_number varchar2(4)
,finalgradename varchar2(2)
,percent number
,lastgradeupdate date
);
insert into your_data values(100, 'M900', 'H1', 70, date '2010-10-01');
insert into your_data values(100, 'M900', 'H1', 90, date '2010-10-20');
insert into your_data values(100, 'M900', 'H2', 85, date '2011-01-01');
insert into your_data values(100, 'M900', 'H3', 88, date '2011-02-06');
insert into your_data values(100, 'M900', 'H4', 89, date '2011-06-07');
commit;
select studentid
,course_number
,max(case when finalgradename = 'H1' then percent end) as h1
,max(case when finalgradename = 'H2' then percent end) as h2
,max(case when finalgradename = 'H3' then percent end) as h3
,max(case when finalgradename = 'H4' then percent end) as h4
from (select studentid
,finalgradename
,course_number
,percent
,row_number() over(partition by studentid
,course_number
,finalgradename
order by lastgradeupdate desc) as rn
from your_data
)
where rn = 1
group
by studentid
,course_number;
STUDENTID COUR H1 H2 H3 H4
---------- ---- ---------- ---------- ---------- ----------
100 M900 90 85 88 89
Обновленный запрос: Я вставил ваш запрос в свой.Я не могу проверить это, хотя ... Дайте мне знать, если это работает!
select studentid
,course_number
,max(case when finalgradename = 'H1' then percent end) as h1
,max(case when finalgradename = 'H2' then percent end) as h2
,max(case when finalgradename = 'H3' then percent end) as h3
,max(case when finalgradename = 'H4' then percent end) as h4
from (select cc.studentid
,pgf.finalgradename
,courses.course_number
,pgf.percent
,row_number() over(partition by cc.studentid
,courses.course_number
,pgf.finalgradename
order by lastgradeupdate desc) as rn
from cc
left outer
join sections sect on abs(cc.sectionid) = sect.id
left outer
join courses on sect.course_number = courses.course_number
left outer
join pgfinalgrades pgf on (cc.studentid = pgf.studentid and
abs(cc.sectionid) = pgf.sectionid)
where abs(cc.termid) >= 2000 and cc.course_number = 'M900'
)
where rn = 1
group
by studentid
,course_number;