首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

image.png 【腾讯面试题】 有一张用户签到表,表中记录了每个用户每天签到的情况。该表包括了三列日期、用户id、用户当日是否签。...该问题是分组排序问题,这类问题要想到《猴子 从零学会SQL》里讲过的窗口函数。 先按用户id分组,找出每个用户id当天未签到的日期,再按日期降序排序。...image.png 每个用户最近一次未签到日期,SQL如下: image.png 查询结果: image.png 看到这的时候,细心的小伙伴一定发现了,用户id为1的用户,消失了。为什么呢?...查询用户签到表开始日期的SQL如下: image.png 2.表联结 题目要求,输出表仅包含当天签到的所有用户。因此需要2个表,表b为当天签到的用户id,表a为每个用户id的最近一次未签到日期。...对应SQL如下: image.png  查询结果: image.png 【本题考点】 遇到要取出每个分组(用户/部门/月份)中,某个字段的值最高/最低/处于第n个的记录,也就是分组排序问题,要想到用窗口函数

69900
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MongoDB系列六(聚合).

    投射(projecting)—> $project 这个语法与查询中的字段选择器比较像:可以通过指定 {"fieldname" : 1} 选择需要投射的字段,或者通过指定 { "fieldname":...对于上面的例子:我们选择了driverUuid 和 positionType 当作我们分组的条件(当然只选择一个字段也是可以的)。..."count":{"$sum":1} 是为分组内每个文档的"count"字段加1。注意,新加入的文档中并不会有"count"字段;这"$group"创建的一个新字段。  ...MongoDB提供了包括分组操作符、数学操作符、日期操作符、字符串表达式 等等 一系列的操作符... 分组操作符 类似 SQL中分组后的操作,只适用于分组后的统计工作,不适用于单个文档。...日期表达式 适用于单个文档的运算,只能对日期类型的字段进行日期操作,不能对非日期类型字段做日期操作。

    4.9K60

    Oracle数据库之第一篇

     日期的数学运算 在日期上加上或减去一个数字结果仍为日期 两个日期相减返回日期之间相差的天数 可以用数字除24  日期函数示例 1. 范例:查询雇员的进入公司的周数。...分组函数作用于一组数据,并对一组数据返回一个值。...也叫:组函数、分组函数 组函数会忽略空值;NVL 函数使分组函数无法忽略空值 11  常用的多行函数  多行函数示例 1.统计记录数count() 范例:查询出所有员工的记录数...sum() 范例:查询出20 号部门的员工的工资总和  分组数据 范例:查询每个部门的人数 11 范例:查询出每个部门的平均工资 范例:查询出来部门编号,和部门下的人数 我们发现报了一个...那么 select 语句中只能查询分组使用的列 和 聚合函数 */ --查询每个部门的平均工资 select deptno,avg(sal) from

    3.4K10

    分享几道LeetCode中的MySQL题目解法

    解决此问题的关键在于: 查询出每个用户的首次登录日期 在首次登录日期的基础上,查询用户次日登录情况 查询首次登录日期相对简单,仅需按用户分组、查询其最早的日期即为首次登录日期;而直接查询次日登录情况则并不容易...该题目看起来似乎是不难的,因为表中用户id、消费日期和平台是联合主键,所以每个用户在每个日期中最多有两条交易记录,此时对应查询目标结果中的both,否则就是单一的平台。但有很多细节需要考虑。...首先,直觉是要进行分组统计,目标是得到每个用户、每个消费日期的交易记录数目及平台,其中交易记录数目=2时,平台为both;否则平台为相应的desktop或mobile。...得到这一查询结果并不难,仅需按用户和消费日期分组聚合并判断记录条目选择平台字段即可: 1SELECT user_id, spend_date, 2 IF(count( platform )...在此基础上,由于最终目标是要查询每个交易日的用户数和交易总额,所以意味着对该结果进一步按消费日期进行分组聚合。但实际上,如果简单的这样分组统计必然会存在有些交易日不是所有平台都有结果。

    2K20

    图解面试题:如何实现精细化运营?

    1.定义指标R、F、M 将指标定义中的“一段时间“定义为1月份(30天)。 最近一次消费时间间隔(R):用户最近一次消费距离现在(1月30日)多长时间了。...select * from 用户行为记录表 where 用户行为类型=’购买’; 查询结果: (1)最近一次消费时间间隔(R) R值:用户最近一次消费距离现在(1月30日)多长时间了。...R值=现在(2020-01-30)- 每个用户最后一次购物日期 每个用户最后一次购物日期,涉及到“每个问题“要想到《猴子 从零学会SQL》里讲过的用分组汇总来实现。...根据“用户编号”分组,然后汇总(最后一次购买日期,就是找到日期的最大值,用汇总函数max) select 用户编号, max(用户活跃日期) as 最后一次购物日期 from a group by a....用户编号; 将该查询结果表示为临时表b。

    84710

    这几道SQL面试题都不会,别干数分啦

    计算登录日期减去第二步骤得到的结果值,用户连续登录情况下,每次相减的结果都相同。 按照id和日期分组并求和,筛选大于等于7的即为连续7天登录的用户。...可以使用SQL的窗口函数或者子查询来找到每个用户的首次购买记录。...在RankedPurchases的CTE(公共表表达式)中,我们使用ROW_NUMBER()窗口函数对每个用户的购买记录按照购买日期进行排序。...PARTITION BY user_id表示我们为每个用户单独编号,ORDER BY purchase_date ASC表示按照购买日期进行升序排列。这样,每个用户的首次购买记录将被编号为1。...在主查询中,我们从RankedPurchases中选择user_id和product_id,但只选择编号为1的记录,即每个用户的首次购买记录。

    14810

    Kettle构建Hadoop ETL实践(八-1):维度表技术

    第三个步骤“去除重复记录”中,用来比较的字段为month、month_name、quarter、year,即按这字段去重。第四的步骤“增加序列”用于生成month_sk字段值。...在销售订单事实表上增加请求交付日期代理键字段,数据类型是整型。已有记录在该新增字段上的值为空。过渡区的销售订单表也增加请求交付日期字段。...第二个是排序记录步骤,在执行分组查询前需要先进行排序。排序的字段按顺序为product_category、year、quarter、month,均为升序。...图8-11所示的转换用于钻取查询,输出每个日期维度级别,即年、季度和月各级别的订单汇总金额。 ?...该步骤在输出流中增加一个名为time_str的String类型字段。最后的“删除日期字段”一个是选择字段步骤,用于选择最终的输出字段,设置如图8-14所示。 ?

    3.5K31

    视频这么火,你会这么分析吗?

    按日期分组(group by日期),汇总(人数用count用户名,操作数用count操作时间)。这里因为表中代表日期的字段“操作时间”是精确到分秒的,所以需要利用date函数将操作时间转为日期形式。...数据分析师小甲先以用户进行分组,找出用户当前操作以及最近一次操作的行为,而后进行统计记人头数,从而给了主管一个非常满意的答案。...按照用户分组,所以partition by后面填上用户id。 那如何区别每个用户各个行为的先后顺序呢?按照每个用户点击的时间来区分,所以order by后面填入操作时间。...image.png 这里找出A操作后,立马是B操作后的用户数,具体思路如下。 首先按照用户名进行分组,其次按照每个用户名下用户的点击时间进行排序,最后以操作记录作为我们想要定位的行为。...某APP的播放记录表如下(用户操作记录表),记录了每个用户进入(Enter)、离开(Leave)某App的时间。

    45700

    【MySQL】MySQL数据库的进阶使用

    insert语句一样,sql语句的返回结果就是1 row affected; MySQL有一个函数叫做row _count(),用于统计最近一次的sql操作所影响的行数。...如何显示每个部门的平均工资和最高工资 显示每个部门的每种岗位的平均工资和最低工资 先以部门的不同将emp中的数据分为三组,然后在每个组内部再按照岗位的不同进行细分组,然后对最终细分的组内进行聚合统计...日期类型一般可以用在记录生日的字段,date类型可以存储日期,time类型可以存储时间,datetime类型可以存储日期+时间数据。...,如果在则返回下标,不在返回0,ucase用于将字符串中的每个英文字符转为大写,lcase用于将字符串中的每个英文字符转为小写,length可以求出字符串所占用的字节数。...,也可以选择子查询的方式 3.嵌套查询(子查询) 1.

    35220

    SQL Server 中处理重复数据:保留最新记录的两种方案

    使用ROW_NUMBER()函数删除重复项ROW_NUMBER()函数是SQL Server中处理重复数据的强大工具之一,可以通过窗口函数来为每一组重复数据分配行号,然后保留每组数据中最新的一条记录。...ORDER BY OrderDate DESC:在每个分组内按OrderDate降序排序,确保最新记录排在首位。ROW_NUMBER():为每组内的记录分配一个行号,最新的记录行号为1。...删除重复记录:在CTE中删除RowNum大于1的记录,即除了每个分组最新的一条记录外,其余视为重复并删除。直接查询:针对CTE筛选RowNum等于1的记录方案二....使用临时表的方式第二种方法是使用临时表来筛选并保留最新记录。具体步骤如下:创建临时表:首先,创建一个临时表,结构与原表相同,用于存储去重后的数据。...使用MERGE语句:通过MERGE语句将原表数据与临时表数据进行比较,保留每个唯一标识下的最新记录。

    27431

    一文带你熟悉MySQL索引

    例如,如果你有一个包含数百万行的订单表,并且根据订单日期进行查询,那么在订单日期列上创建索引将大大减少查询时间,因为数据库可以直接跳到相关日期的数据,而不是扫描所有行。3....一个表中只能有一个主键索引,通常用于唯一标识表中的每条记录。例如,用户表中的UserID列,每个用户都有一个唯一的ID,适合作为主键索引。...适用于大多数查询场景,可以显著提高查询速度。例如,如果经常根据CreatedAt列查询最近的记录,可以在此列上创建普通索引。全文索引:全文索引用于对文本内容进行高效搜索,支持分词和模糊匹配。...适用于经常需要根据多个列进行查询的场景,其效率通常高于单独为每个列创建索引。...然而,由于每个表只能有一个聚集索引,因此在设计数据库时需要谨慎选择主键,以确保数据的有效组织和高效访问。

    19010

    数分面试必考题:窗口函数

    三种分组排序的区别-row_number、rank、dense_rank RANK-计算排序时,如果存在相同位次的记录,则会跳过之后的位次。...2、连续登录问题 假设有一张含两列(用户id、登陆日期)的表,查询每个用户连续登陆的天数、最早登录时间、最晚登录时间和登录次数。...运行的代码及结果为: ? ? 第二步,用user_id和辅助列作为分组依据,分到一组的就是连续登录的用户。...在每一组中最小的日期就是最早的登陆日期,最大的日期就是最近的登陆日期,对每个组内的用户进行计数就是用户连续登录的天数。 运行代码及结果为: ? ? 若求解每个用户的最大登录天数。...示例:数据还是上题中的数据,求解连续登录五天的用户 第一步,用lead函数进行窗口偏移,查找每个用户5天后的登陆日期是多少,如果是空值,说明他没有登录。运行的代码为 ?

    2.3K20

    SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )

    ORDER BY 命令放在查询、分组等语句的最后。...列的设置可以加上默认值,如NOT NULL后边接 DEFAULT CURRENT_DATE() ,默认值为当前日期。(每个数据库获取当前日期语句不同。)...DEFAULT 默认约束,用于向列中插入默认值 每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 每种约束可以创建表时设置好,也可以后期增删....视图 对已存在的表,进行筛选,数据处理,联结等操作后返回的数据,创建的虚拟表。视图是为了重用和简化常用的查询。对视图的查询同表。 视图总是显示最近的数据。...删除视图: DROP VIEW ProductCustomers; 其它 存储过程:为以后的使用保存一条或多条SQL语句,用于简化操作。每个数据库不同,见数据库具体介绍。

    2.2K20

    MySQL数据库案例实战教程:数据类型、语法与高级查询详解

    排序 order by like 通配符 group by 分组查询 连接查询 ifnull MySQL 案例实战教程 MySQL的数据类型​​ MySQL支持多种类型,大致可以分为三类:数值、日期/...查询每个网站的每天的访问量,显示出:名称访问量日期 /*过时写法*/ /*不加where的话会随意乱连*/ /*内连接*/ select name,a.count,a.date from websites...这条查询的作用是获取网站名称、访问次数以及最近访问日期(如果有的话)。...具体解释如下: `select name, ifnull(count,0), ifnull(a.date,'无日期')`: 从左表 websites 中选择 name 列,并从右表 access_log...ifnull 函数用于将可能的 NULL 值替换为指定的默认值(0 或 '无日期')。 总的来说,这条查询用于获取网站的访问次数以及最近访问日期(如果有的话),并且对可能的 NULL 值进行了处理。

    24710

    mysql汇总

    查询姓名由5个字母构成,并且第5个字母为“s”的学生记录 SELECT * FROM students WHERE name LIKE '____s'; 查询姓名以“m”开头的学生记录 SELECT *...查询姓名中第2个字母为“u”的学生记录 SELECT * FROM students WHERE name LIKE '_u%'; 查询姓名中包含“s”字母的学生记录 SELECT * FROM stu...分组查询 什么是分组查询 将查询结果按照1个或多个字段进行分组,字段值相同的为一组 分组使用 SELECT gender from employee GROUP BY gender; 根据gender...where是在分组前对数据进行过滤 having后面可以使用分组函数(统计函数) where后面不可以使用分组函数 WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组...(x) 小数部分下取整,即向下取最近的整数 MOD(X,Y) 返回X/Y的模 RAND() 返回0-1内容的随机值 日期和时间函数 CURDATE() 返回当前日期,只包含年月日 CURTIME

    26710

    SQL中去除重复数据的几种方法,我一次性都告你​

    以某电商公司的销售报表为例,常见的去重方法我们用到distinct 或者group by 语句, 今天介绍一种新的方法,利用窗口函数对数据去重。...【字段解释】 访客id:进入店铺浏览宝贝的客户 浏览时间:访客进入店铺浏览页面的日期 浏览时常:访客进入店铺浏览页面的时长 现在需要知道店铺里每个访客和对应的浏览日期(每个访客同一天浏览多次算做一次记录...详细的窗口函数讲解(请点击-通俗易懂的学会:SQL窗口函数) 窗口函数的基本语法如下: over (partition by 用于分组的列名> order...by 用于排序的列名>) 根据题目要求得出每个访客和对应的浏览日期,我们对访客id ,浏览时间进行分组,对浏览时长(秒)进行排序。...: 窗口函数查询按照每个客户和浏览日期分组,如果同一天有几次浏览,会根据点赞数排序,筛选排名为1,即可得出每个访客和对应的浏览日期。

    5.1K10

    SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )

    ORDER BY 命令放在查询、分组等语句的最后。...列的设置可以加上默认值,如NOT NULL后边接 DEFAULT CURRENT_DATE() ,默认值为当前日期。(每个数据库获取当前日期语句不同。)...DEFAULT 默认约束,用于向列中插入默认值每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 每种约束可以创建表时设置好,也可以后期增删....视图 对已存在的表,进行筛选,数据处理,联结等操作后返回的数据,创建的虚拟表。视图是为了重用和简化常用的查询。对视图的查询同表。 视图总是显示最近的数据。...删除视图: DROP VIEW ProductCustomers; 其它 存储过程:为以后的使用保存一条或多条SQL语句,用于简化操作。每个数据库不同,见数据库具体介绍。

    1.5K10

    《计算机网络:自顶向下方法》笔记(2):应用层

    往返时间 RTT(Round-Trip Time),表示一个短分组从客户到服务器再反悔到客户所花费的时间。RTT 包括分组传播时延,排队时延和处理时延。...格式为:(Name,Value,Type,TTL),TTL 为记录的缓存的生存时间。...TYPE = A 时,NAME 为主机名,VALUE 为 IP 地址 TYPE = NS 时,NAME 为域,VALUE 为权威 DNS 服务器主机名,用于指向该域应该向哪个 DNS 服务器查询 TYPE...一种精确有效的办法是:为每个对等方分配一个 [0, 2^n – 1] 之间的标识符,对每一个文件都进行 hash,hash 的取值范围也是 [0, 2^n – 1]。...然后该文件选择临近的标识符对应的对等方来存储。 那么当我们知道一个文件的 hash 值,需要找到最近的对等方时,应该如何寻找呢?遍历显然是不可取的。

    70720
    领券