0
今私は、の値のうち、複数の「クラス」のデータに対しての値を返すクエリを持っています。私は何を変更するのか把握しようとしていますので、下のクラスごとにの最新のの値が返されます。は、1つのSQLクエリでさまざまな種類のデータの最新の値を返します。
データそのものは、学生グレードの大きな表です。生徒は複数の成績を持つことができます(pgf.finalgradenameフィールドで取得)。 の学生の場合、生徒の識別子とクラスの識別子で単純に結合するだけで正しいデータが返されます。しかし、私は学生がコースの1つのセクションを落とし、同じコースの別のセクションに登録する状況を説明しようとしています。私の目的のために、最近更新されたグレードが優先レコードを表すと仮定することができます。
以下のフィールドに加えて、レコードが更新された日付を表すpgf.lastgradeupdateフィールドがあります。英語では、私が元に戻すことを望んでいるのは、pgf.lastgradeupdateに基づく最新の行です。このデータを考える:
studentid course_number finalgradename percent 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
私は、クエリが返すようにしたいと思う:
studentid 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
は、私はそれらのそれぞれについて、サブクエリを作成する必要があります "クラスのデータ?または、私はたくさんの自己結合を行う必要がありますか?私がここで読んだその他の質問は、いくつかではなく、一つの日付しか考慮する必要のない状況に基づいているように見えました。 ありがとう!