题解 | #第二快/慢用时之差大于试卷时长一半的试卷#

第二快/慢用时之差大于试卷时长一半的试卷

http://www.nowcoder.com/practice/b1e2864271c14b63b0df9fc08b559166

问题拆解

  1. 求出每个人做题的时间差,并精确到秒:timestampdiff(second, start_time, submit_time)
  2. 按照卷子的类型将完成时间排序,并找到第二名和倒数第二名,因此可以正序和倒序排两次:row_number() over(partition by er.exam_id order by timestampdiff(second, start_time, submit_time) desc) as ranking1, 正序的为ranking2;之后筛选ranking1或者ranking2找到对应的行
  3. 表格的联结:from exam_record as er join examination_info as ei on er.exam_id = ei.exam_id
  4. 按照卷子的id分组求最大值和最小值的差(因为我们之前已经通过ranking1和ranking2字段筛选出两行,因此max()-min()直接可以求出时间差): max(exam_time) - min(exam_time) > duration * 0.5 * 60

代码如下

select exam_id, duration, release_time
from(
    select er.exam_id, duration, release_time,
    timestampdiff(second, start_time, submit_time) as exam_time,
    row_number() over(partition by er.exam_id order by timestampdiff(second, start_time, submit_time) desc) as ranking1,
    row_number() over(partition by er.exam_id order by timestampdiff(second, start_time, submit_time)) as ranking2
    from exam_record as er join examination_info as ei on er.exam_id = ei.exam_id
) as temp1
where ranking1 = 2&nbs***bsp;ranking2 = 2
group by exam_id , duration, release_time
having max(exam_time) - min(exam_time) > duration * 0.5 * 60
order by exam_id desc 

全部评论

相关推荐

11-30 11:07
河南大学 Java
宇宙厂 测开 n*15
丘丘给个offer:有后选后
点赞 评论 收藏
分享
Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
我在朝九晚六双休的联想等你:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务