【发布时间】:2011-01-04 05:11:29
【问题描述】:
现在我有一个查询,它返回多个“类”数据的 最大 值。我正在尝试找出要更改的内容,以便我的查询将返回以下每个不同类的最新 最近 值。
数据本身就是一个学生成绩的大表。一个学生可以有多个学期的成绩(由 pgf.finalgradename 字段捕获)。 大多数学生只需通过学生标识符和班级标识符加入即可返回正确的数据;但是,我试图解释学生放弃课程的一个部分并注册另一部分(同一课程的)的情况。出于我的目的,我们可以假设最近更新的成绩代表首选记录。
除了下面的字段之外,还有一个 pgf.lastgradeupdate 字段表示记录的更新日期。在英语中,我希望得到的是基于 pgf.lastgradeupdate 的最新行。鉴于此数据:
studentid course_number finalgradename 百分比 lastgradeupdate 100 M900 H1 70 01-OCT-10 100 M900 H1 90 20-OCT-10 100 M900 H2 85 01-JAN-11 100 M900 H3 88 06-FEB-11 100 M900 H4 89 07-JUN-11我希望查询返回:
学生号 H1 H2 H3 H4 100 90 85 88 89这是我所拥有的:
select cc.studentid,
max(case when pgf.finalgradename='H1' then pgf.percent else null end) as H1,
max(case when pgf.finalgradename='H2' then pgf.percent else null end) as H2,
max(case when pgf.finalgradename='H3' then pgf.percent else null end) as H3,
max(case when pgf.finalgradename='H4' then pgf.percent else null end) as H4
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'
group by cc.studentid
我是否需要为每个“类”数据创建一个子查询?还是我需要做一堆自我连接?我在这里读到的其他问题似乎只是基于只需要考虑一个日期而不是几个日期的情况。 谢谢!
【问题讨论】: