赞
踩
- 点击关注公众号,SQL干货及时获取
- 后台回复:1024,获取海量学习资源
- SQL刷题专栏
- SQL145题系列
近日,有小米的员工爆料:小米2月29号又要大裁员了,3月5号发年终奖,在此之前大裁员,完全有坑员工年终奖之嫌。
以下是该员工原话:
确切消息,小米2024年2月29日又要裁员,赔偿标准是 n + 1,只通知,不协商。3月5号发年终奖,提前裁员又要坑员工一波年终奖。一个大企业,天天搞这种鸡鸣狗盗的事有点社会责任感吗?入职谈薪资时,说我们是14薪,强行把月薪压入年终。然后努力工作一年,绩效又要像奴才一样看人家脸色,入职3年,年终一次也没有拿全过。对自己的员工都行周扒皮之事,对客户能好到哪去?想买小米汽车的三思而行。
并且,评论底下已经有小米员工附和证实:2月底走人,被N+1了。
评论区有一名员工罗列了这些年的不满之处:
如果这波裁员消息被最后实锤,那真让人无言以对。
以下是今天的SQL面试题
问题描述
有如下一张记录表 T20240207,如何查询出每隔 15 分钟的记录数
预期结果如下:
问题解析
这里主要是分组的这个函数改怎么理解。为了大家看的更加清楚明白,我们把这其中的每 个函数都单独拆分开给大家看看
- 1、SELECT DATEADD(ss,1,times) FROM T20240207
- 2、SELECT CONVERT(VARCHAR(10),DATEADD(ss,1,times),120) FROM T20240207
- 3、SELECT
- (DATEDIFF(mi,CONVERT(VARCHAR(10),DATEADD(ss,1,times),120),DATEADD(ss,1,times))/
- 15)*15 FROM T20240207
- 4、SELECT CONVERT(VARCHAR(10),times,120) FROM T20240207
- 5、SELECT
- DATEADD(mi,(DATEDIFF(mi,CONVERT(VARCHAR(10),DATEADD(ss,1,times),120),DATEADD(ss
- ,1,times))/15)*15,CONVERT(VARCHAR(10),times,120)) FROM T20240207
上面5个拆解的查询结果如下:
这里最重要的就是第3个函数转换DATEDIFF,它是首先将times的完整时间 DATEADD(ss,1,times)减去times的日期部分CONVERT(VARCHAR(10),DATEADD(ss,1,times), 最后就得到了时间部分,然后将时间按分钟进行换算,得出一个整数。
我们知道在SQL中整数除以15最后还是整数,会自动直接舍弃小数部分。其实关键就是要舍弃这个小数部分,这样我们再乘以15就可以得到times最接近的15分钟是 那一刻了。再将这个时刻对应的整数转换成时间类型,就是第5部我们得到内容了。
参考答案
- create table T20240207
- (
- ID int,
- Times varchar(50)
- );
-
- insert into T20240207 values (1,'2019-12-25 11:01');
- insert into T20240207 values (2,'2019-12-25 11:03');
- insert into T20240207 values (3,'2019-12-25 11:05');
- insert into T20240207 values (4,'2019-12-25 11:09');
- insert into T20240207 values (5,'2019-12-25 11:17');
- insert into T20240207 values (6,'2019-12-25 11:19');
- insert into T20240207 values (7,'2019-12-25 11:29');
- insert into T20240207 values (8,'2019-12-25 11:37');
-
-
- SELECT T.时间段 , T.行数
- FROM (
- SELECT
- DATEADD(mi,(DATEDIFF(mi,CONVERT(VARCHAR(10),DATEADD(ss,1,Times),120),DATEADD(ss
- ,1,Times))/15)*15,CONVERT(VARCHAR(10),Times,120)) AS '时间段',
- COUNT(*) AS '行数'
- FROM T20240207
- GROUP BY
- DATEADD(mi,(DATEDIFF(mi,CONVERT(VARCHAR(10),DATEADD(ss,1,Times),120),DATEADD(ss
- ,1,Times))/15)*15,CONVERT(VARCHAR(10),Times,120))
- ) T

以上试题节选自《SQL145题》。
- 最后给大家分享我写的SQL两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。
-
-
- 有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行
- 数据前线
后台回复关键字:1024,获取一份精心整理的技术干货
后台回复关键字:进群,带你进入高手如云的交流群。
推荐阅读
- 文章有帮助的话,点个赞或在看吧。
- 谢谢支持
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。