首页 新闻 会员 周边

MySql数据查询,学员答题记录表,如何通过试卷ID和学员编码,获取学员答题批次?

0
悬赏园豆:100 [已解决问题] 解决于 2017-01-20 14:46

前提:最开始的时候没想到那么多,只想做一个记录而已,可随着需求的跟进,要求从记录表中获取批次相关信息。

表结构如下:

 

 参考数据: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. 试卷考题数量不可控,有的试卷考题比较多,有的比较少,但同一张试卷能保证数量一致;

Joinfish的主页 Joinfish | 初学一级 | 园豆:112
提问于:2017-01-18 22:17
< >
分享
最佳答案
0

对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
)

收获园豆:100
tootwo2 | 小虾三级 |园豆:502 | 2017-01-18 22:36

好的,我晚上试试,如果可以的话,就结贴给你了哈!这样的查询,性能如何呢?

Joinfish | 园豆:112 (初学一级) | 2017-01-19 11:20

@Joinfish: 一般情况下都没问题

tootwo2 | 园豆:502 (小虾三级) | 2017-01-19 22:11

@tootwo2: 我昨晚测试了下,性能上面有点慢,不过我放到视图里,貌似还可以接受,先这样吧,给你结贴了!

Joinfish | 园豆:112 (初学一级) | 2017-01-20 14:45

@Joinfish: 慢?你是全表查询吗,大概多少数据了,什么数据库

tootwo2 | 园豆:502 (小虾三级) | 2017-01-22 22:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册