您可以从他们完成的考试中推断出学生正在接受的学科。
SELECT subject FROM subject
JOIN exam ON subject.idx = exam.subject_idx
JOIN student ON exam._student_idx = student.idx
WHERE student.name = 'Joe Bloggs'
您还可以查询给定学科和学生的最新考试:
SELECT exam FROM exam
JOIN subject ON exam.subject_idx = subject.idx
JOIN student ON exam.student_idx = student.idx
WHERE subject.name = 'math' AND student.name = 'Joe Bloggs'
ORDER BY completed_at DESC
LIMIT 1
caviven某个学生“ Joe Bloggs”,您如何获得对学生参加的所有学科的最新测试?合乎逻辑的方法是获得第一个查询的主题,并在第二个查询中迭代主题,但我不确定如何做到这一点,或者这是最好的方法。
未见,但在我看来,您只需要SQL
groupby:
select
max(completed_at) as completed_at,
subject.name as SubjectName,
student.name as StudentName
from
exam
inner join subject
on exam.subject_idx = subject.idx
inner join student
on exam.student_idx = student.idx
group by
subject.name,
student.name
order by
student.name,
subject.name
使用cte的天这些问题也非常常见:
with cte as (
select
exam.completed_at,
subject.name as SubjectName,
student.name as StudentName,
row_number() over (partition by student.name, subject.name order by exam.completed_at desc) as RowNumber
from
exam
inner join subject
on exam.subject_idx = subject.idx
inner join student
on exam.student_idx = student.idx
)
select
cte.completed_at,
cte.SubjectName,
cte.StudentName
from cte
where cte.RN = 1
order by
cte.StudentName,
cte.SubjectName