专栏首页猴子数据分析腾讯面试题:你今天上班打卡了吗?
原创

腾讯面试题:你今天上班打卡了吗?

【腾讯面试题】

有一张用户签到表,表中记录了每个用户每天签到的情况。该表包括了三列日期、用户id、用户当日是否签。

问题:计算截至当前每个用户已经连续签到的天数(输出表仅包含当天签到的所有用户,计算其连续签到天数)

【解题步骤】

1.分组排序

先看问题,要求输出两个字段:当天签到的用户id和连续签到的天数。

翻译成大白话就是,找出当天签到的用户,和每个用户最近一次未签到的日期,计算从上一次未签到日期到当天的间隔天数(这段时间内,该用户每天签到)。

该问题是分组排序问题,这类问题要想到《猴子 从零学会SQL》里讲过的窗口函数。

先按用户id分组,找出每个用户id当天未签到的日期,再按日期降序排序。举个例子,下图排在第一个的就是最近一次未签到的日期。

每个用户最近一次未签到日期,SQL如下:

查询结果:

看到这的时候,细心的小伙伴一定发现了,用户id为1的用户,消失了。为什么呢?

因为在给出的示例数据中,用户id为1的用户每天都签到,没有未签到日期。那么这类用户的连续签到天数该如何计算呢?

我们可以查询用户签到表的开始日期,将那天作为该用户开始签到的日期,计算该日期和当天的间隔,然后加1,即为该用户的连续签到天数。

查询用户签到表开始日期的SQL如下:

2.表联结

题目要求,输出表仅包含当天签到的所有用户。因此需要2个表,表b为当天签到的用户id,表a为每个用户id的最近一次未签到日期。

根据上文描述知道,有的用户每天都签到,在表b中,该用户不存在。因此在以用户id关联两个表时,若在表b中用户id关联不到时,使用用户签到表的开始日期,计算连续签到天数。

对应SQL如下:

 查询结果:

【本题考点】

遇到要取出每个分组(用户/部门/月份)中,某个字段的值最高/最低/处于第n个的记录,也就是分组排序问题,要想到用窗口函数

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 腾讯乐享背后的女人们

    她基本总是最早来到公司,除了桌上永远都有三、四杯咖啡,还铺满了打印好的用户需求,商务经理们还要手写大字报,随时“威胁”她!

    腾讯乐享
  • 《校园垃圾分类闭卷考试》附答案

    ? 近期,网友们被各种灵魂拷问 食堂阿姨:要饭吗? 快递小哥:你是什么东西? 配钥匙师傅:你配吗? 出租车师傅:你的定位是什么? 垃圾分拣阿姨:你是什么垃圾...

    鹅老师
  • 最新 10 款小程序,最后一个脑洞真大 | 晓榜

    赏花时,除了用「形色识花」小程序帮你优雅装 X ,本期「晓榜」选出的这 10 款最新小程序,想必也一定有你需要的。

    知晓君
  • 2020年校园“古董”鉴赏

    ? 随着21世纪10年代的结束 不止第一批90后正式迈入30大关 一大批90后回忆里的“校园老古董” 也因为“教育+科技”即将退出历史舞台 再见,“三年二班”...

    鹅老师
  • 云南空中课堂打出教育防疫“组合拳”:腾讯智慧校园 + 企业微信

    ? ? 2月10日,昆明市滇池度假区实验学校(以下简称“滇池实验”)初三毕业班的学生,通过电脑或手机,迎接了一场特殊的开学典礼:戴着口罩的校领导和学科老师们,...

    腾讯智慧教育
  • 请查收!这里有一封信鸽传给您的信

    前言看这里 近年来,随着互联网和信息产业的高速发展,“大数据”这一概念已经深入人心,腾讯推出了大数据产品之一——信鸽。那么,腾讯这只信鸽有何与众不同呢?下面让小...

    企鹅号小编
  • 从春招到秋招,算法工程师养成记(阿里+腾讯+其他)

    自我介绍 大家好,我是老班长,一名老牛油(至于多老呢?我基本是第一批关注牛客网的同学,我加牛客网qq1群的时候,群里只有400多人(现在估计10多个群了吧),那...

    牛客网
  • 程序员议 打卡制度,脑残思维;管理之方,不能儿戏

    似乎只要实行打卡考勤,大家的工作热情就立即会被调动起来;似乎只要实行打卡考勤,那些偷懒的家伙就会立即变得勤奋起来;似乎只要实行打卡考勤,我们的工作效率就会大幅提...

    用户5997198
  • 4亿、7万、1.5万...我们数了数腾讯教育的果实

    ? 小超(化名)是留守儿童,父母常年在外打工,家庭生活的缺失,使得他“性格或者成绩,都存在一些问题。在校时,他几乎不与任何人交流。”小超的班主任说。 腾讯教...

    鹅老师

扫码关注云+社区

领取腾讯云代金券