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

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

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

#timestampdiff + 窗口函数row_number() 正序+倒序排列 + where + group by + max -min
#数据连接
SELECT
    ei.exam_id
    ,ei.duration
    ,ei.release_time
from examination_info ei join
    (#筛选每个用户正序和倒序第二的时间(where)并利用groupby 计算差值
    select
        tmp2.exam_id
        ,max(tmp2.dt) - min(tmp2.dt) as diff
    from(#按照试卷完成时间进行排序
        select
            tmp1.*
            ,row_number() over(partition by tmp1.exam_id order by tmp1.dt) as rk
            ,row_number() over(partition by tmp1.exam_id order by tmp1.dt desc) as drk
        from (#先准备试卷完成时间 timestampdiff
            select
                *
                ,timestampdiff(second,start_time,submit_time)/60 as dt
            from exam_record
            where submit_time is not null
            )tmp1
        )tmp2
    where tmp2.rk=2 or tmp2.drk=2
    group by tmp2.exam_id
    )tmp3
on ei.exam_id=tmp3.exam_id and tmp3.diff>(ei.duration/2)
order by ei.exam_id desc
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务