我有一个学生历史表,用于维护每个学生的注册部分历史记录。例如,学生X目前在第1部分,学生X可能在过去的其他部分(包括第1部分中的过去注册)。
每次学生X更改为另一部分时,记录都会添加到学生历史记录表中。
学生历史记录表具有以下结构:
Student Id
,Date_entered
,section_id
我需要编写一个SQL查询来获取以下场景的记录:
在第1节和第1节中获取当前所有学生的Student Id
2(学生最近date_entered
必须是第1或第2部分。结果不应包括参加这些部分的任何学生1& 2过去。
示例查询:
select student_id from student_Queue_history where section_id in (1, 2)
有人可以帮我写这个查询吗?
答案 0 :(得分:0)
你的桌面有一些非常具有挑战性的设计缺陷,但你可以利用ROW_NUMBER。从性能角度来看,这不是最好的,但次优设计限制了您可以做的事情。请注意,这仍然是一个猜测,因为你没有提供太多详细信息。
with CurrentStudents as
(
select *
, ROW_NUMBER() over(partition by student_id order by date_entered desc) as RowNum
from student_Queue_history
)
select *
from CurrentStudents
where section_id in (1, 2)
and RowNum = 1
答案 1 :(得分:0)
您可以首先select
每个学生的最长日期,然后join
返回student_history
表。
with maxdate as (
select student_id, max(date_entered) as mxdate
from student_history
group by student_id)
select s.*
from student_history s
join maxdate m on s.student_id = m.student_id and s.date_entered = m.mxdate
where s.section_id in (1,2)
答案 2 :(得分:0)
view.startAnimation(rotation);
photo.setActionView(view);