前提:最开始的时候没想到那么多,只想做一个记录而已,可随着需求的跟进,要求从记录表中获取批次相关信息。
表结构如下:
参考数据:http://www.cnblogs.com/jolinfish/diary/2017/01/18/6298377.html
需求分析:要求从学员记录表中通过试卷ID和学员编码得知批次记录信息;例如当前学员是第几次参与此试卷的答题,首次答题信息,第二次答题信息,第N次答题信息,以及最后一次答题信息,这里考虑可以做成公用视图,存储过程或函数,外部通过条件筛选或者参数调取即可。
提示:示例中的学员314,总共参与了2次答题(group by exam_id可以得知),我们可以肉眼得知5444~5453为学员的首次答题情况,5454~5463为学员第二次答题情况,也是最后一次。那么能否通过SQL获得我们肉眼所知的结果?
注意事项:
a. 一个学员可以可以参与各种试卷答题,例如物理,数学;
b. 学员可以对一张试卷进行反复答题,直到通过为止(这套逻辑在另外一张表);
c. 试卷考题数量不可控,有的试卷考题比较多,有的比较少,但同一张试卷能保证数量一致;
对paper_id,exam_id,training_id进行group by取出最大的id,也就是最后回答的记录的id,根据Id取出对应的数据就可以了
以mysql为例sql(oracle应该没问题,sqlserver太久没用了):
select *
from recordsexam
where id in(
select max(id) id
from recordsexam
group by paper_id,exam_id,training_id
)
好的,我晚上试试,如果可以的话,就结贴给你了哈!这样的查询,性能如何呢?
@Joinfish: 一般情况下都没问题
@tootwo2: 我昨晚测试了下,性能上面有点慢,不过我放到视图里,貌似还可以接受,先这样吧,给你结贴了!
@Joinfish: 慢?你是全表查询吗,大概多少数据了,什么数据库