前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图解SQL面试题:如何比较日期数据?

图解SQL面试题:如何比较日期数据?

作者头像
猴子数据分析
发布于 2024-01-03 06:36:17
发布于 2024-01-03 06:36:17
31300
代码可运行
举报
文章被收录于专栏:猴子数据分析猴子数据分析
运行总次数:0
代码可运行

【题目】

下面是某公司每天的营业额,表名为“日销”。“日期”这一列的数据类型是日期类型(date)。

请找出所有比前一天(昨天)营业额更高的数据。(前一天的意思,如果“当天”是1月,“昨天”(前一天)就是1号)

例如需要返回一下结果:

【解题思路】

1.交叉联结

首先我们来复习一下之前课程《从零学会sql》里讲过的交叉联结(corss join)的概念。

使用交叉联结会将两个表中所有的数据两两组合。如下图,是对表“text”自身进行交叉联结的结果:

直接使用交叉联结的业务需求比较少见,往往需要结合具体条件,对数据进行有目的的提取,本题需要结合的条件就是“前一天”。

2.本题的日销表交叉联结的结果(部分)如下。这个交叉联结的结果表,可以看作左边三列是表a,右边三列是表b。

红色框中的每一行数据,左边是“当天”数据,右边是“前一天”的数据。比如第一个红色框中左边是“当天”数据(2号),右边是“前一天”的数据(1号)。

题目要求,销售额条件是:“当天” > “昨天”(前一天)。所以,对于上面的表,我们只需要找到表a中销售额(当天)大于b中销售额(昨天)的数据。

3.另一个需要着重去考虑的,就是如何找到 “昨天”(前一天),这里为大家介绍两个时间计算的函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
daffdate(日期1, 日期2):
得到的结果是日期1与日期2相差的天数。
如果日期1比日期2大,结果为正;如果日期1比日期2小,结果为负。

例如:日期1(2019-01-02),日期2(2019-01-01),两个日期在函数里互换位置,就是下面的结果

另一个关于时间计算的函数是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
timestampdiff(时间类型, 日期1, 日期2)
这个函数和上面diffdate的正、负号规则刚好相反。
日期1大于日期2,结果为负,日期1小于日期2,结果为正。

在“时间类型”的参数位置,通过添加“day”, “hour”, “second”等关键词,来规定计算天数差、小时数差、还是分钟数差。示例如下图:

【解题步骤】

1.将日销表进行交叉联结

2.选出上图红框中的“a.日期比b.日期大一天”

可以使用“diffdate(a.日期, b.日期) = 1”或者“timestampdiff(day, a.日期, b.日期) = -1”,以此为基准,提取表中的数据,这里先用diffdate进行操作。

代码部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
elect *
from 日销 as a cross join 日销 as b 
     on datediff(a.日期, b.日期) = 1;

得到结果:

3.找出a中销售额大于b中销售额的数据

where a.销售额(万元) > b.销售额(万元)

得到结果:

4.删掉多余数据

题目只需要找销售额大于前一天的ID、日期、销售额,不需要上表那么多数据。所以只需要提取中上表的ID、日期、销售额(万元)列。

结合一开始提到的两个处理时间的方法,最终答案及结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select a.ID, a.日期, a.销售额(万元)
from 日销 as a cross join 日销 as b 
     on datediff(a.日期, b.日期) = 1
where a.销售额(万元) > b.销售额(万元);

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
elect a.ID, a.日期, a.销售额(万元)
from 日销 as a cross join 日销 as b 
     on timestampdiff(day, a.日期, b.日期) = -1
where a.销售额(万元) > b.销售额(万元);

【本题考点】

1)考察逻辑思维能力,可以使用课程《分析方法》中的逻辑树分析方法将复杂问题拆解成一个一个可以解决的子问题

2)考察多表联结

3)针对时间的处理语句是在业务中经常用到的,需要熟练掌握。

4) 尤其考察对不同sql数据格式处理的掌握程度,

【举一反三】

下面是气温表,名为weather,date列的数据格式为date,请找出比前一天温度更高的ID和日期

参考答案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
elect a.ID, a.date
from weather as a cross join weather as b 
     on datediff(a.date, b.date) = 1
where a.temp > b.temp;

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
elect a.ID, a.date
from weather as a cross join weather as b 
     on timestampdiff(day, a.date, b.date) = -1
where a.temp > b.temp;

得到结果。

我是猴子,中科院硕士/前IBM高级软件工程师/豆瓣8分《数据分析思维》作者,我在知乎知学堂上线了一个数据分析课程,结合IBM项目经验和国内互联网大厂一线业务案例,讲解常用模型+逻辑框架,还有常用数据分析工具带练+业务实操带练,数据分析技能和思维两条腿走路,让你成为真正的数据分析师,而不是数据处理工具人。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猴子数据分析 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
图解面试题:如何找到破产玩家?
下表是一个玩家某天的游戏对局时间记录以及破产记录。现在要分析出当天连续破产玩家人数,这里的连续破产概念是连续两次记录为1就算。有什么思路来判断小表中的a用户是破产玩家?
猴子聊数据分析
2020/07/31
5240
详解SQL中连续N天都出现的问题
在我们日常统计过程中,像这种要统计连续N天都出现的问题比较普遍。比如统计连续三天销售额大于10万的是哪几天,连续一周客流量大于100的是哪几天等等。
SQL数据库开发
2024/04/24
3380
详解SQL中连续N天都出现的问题
链家面试题:如何分析留存率?
手机中的相机是深受大家喜爱的应用之一,下图是某手机厂商数据库中的用户行为信息表中部分数据的截图。
猴子聊数据分析
2020/06/28
3.2K1
教育行业案例:如何分析​复购用户?
请使用sql将购买记录表中的信息,提取为下表(复购分析表)的格式。并用一条sql语句写出。
猴子数据分析
2022/12/12
1.1K0
教育行业案例:如何分析​复购用户?
Leetcode No.197 上升的温度
编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。
week
2021/05/06
4050
一文带你了解如何用SQL处理周报数据
表一:周度销售表记录了每个自然周全国店铺的销售信息,字段包含了周、店铺代码、吊牌金额、销售金额。
猴子数据分析
2023/09/06
4130
一文带你了解如何用SQL处理周报数据
滴滴2020年面试题:如何找出最小的N个数?
“学生表”里记录了学生的学号、入学时间等信息。“成绩表”里是学生选课成绩的信息。两个表中的学号一一对应。(滴滴2020年面试题)
猴子聊数据分析
2020/05/13
1.1K0
图解面试题:如何分析游戏?
猴子是一个班级的班主任,由于所带班级的学生成绩普遍不是很好。现在他需要找出每门课程中成绩最差的学生,然后有针对性的辅导。
猴子聊数据分析
2020/04/12
6130
10道常考SQL笔试题
题目:在 Employees 表中,获取每个部门(department)薪资最高的员工的姓名、部门和工资。表结构如下:
SQL数据库开发
2024/09/24
2500
10道常考SQL笔试题
图解面试题:经典50题
翻译成大白话:计算每个学号不及格分数个数,筛选出大于2个的学号并找出姓名,平均成绩,思路如图:
猴子聊数据分析
2020/06/24
6420
图解面试题:多表如何查询?
查询结果的列名“学号”、“姓名”,在“学生”表里,列名“课程”、“成绩”在“成绩”表里,所以需要进行多表查询。
猴子聊数据分析
2019/12/27
7610
图解面试题:查找不在表里的数据
下面是学生的名单,表名为“学生表”;近视学生的名单,表名为“近视学生表”。请问不是近视眼的学生都有谁?
Lenis
2019/12/25
3600
图解面试题:查找不在表里的数据
2022-12-09:上升的温度。以下的数据输出2和4,2015-01-02 的温度比前一天高(10 -> 25),2015-01-04 的温度比前一天高(20
2022-12-09:上升的温度。以下的数据输出2和4,2015-01-02 的温度比前一天高(10 -> 25),2015-01-04 的温度比前一天高(20 -> 30),sql语句如何写?
福大大架构师每日一题
2022/12/09
3020
2022-12-09:上升的温度。以下的数据输出2和4,2015-01-02 的温度比前一天高(10 -> 25),2015-01-04 的温度比前一天高(20
「SQL面试题库」 No_111 活跃用户
``` Accounts 表: +----+----------+ | id | name | +----+----------+ | 1 | Winston | | 7 | Jonathan | +----+----------+
不吃西红柿
2023/10/16
1880
「SQL面试题库」 No_102 按年度列出销售总额
题目介绍: 按年度列出销售总额 total-sales-amount-by-year
不吃西红柿
2023/10/16
2540
高级SQL查询技巧——利用SQL改善和增强你的数据
关系数据库系统和混合/云数据管理解决方案的用户都可以使用SQL灵活地访问业务数据,并以创新的方式进行转换或显示。
云原生
2021/05/31
5.9K0
高级SQL查询技巧——利用SQL改善和增强你的数据
一道SQL题的多种解法
自然的想法,寻找每个店铺是否连续三天都有销售额。利用现有的表,构造一个中间表,中间表既有当前日期的销售额,又有当前日期后两天的销售额,然后筛选销售额大于0的店铺名称即可。这种思路可以有(至少)两种实现方式。
数据森麟
2019/09/27
7330
一道SQL题的多种解法
必须了解的十个高级 SQL 概念
随着数据量持续增长,对合格数据专业人员的需求也会增长。具体而言,对SQL流利的专业人士的需求日益增长,而不仅仅是在初级层面。
用户1516716
2021/03/23
1.1K0
SQL Server中With As的介绍与应用(三)--递归的实战应用
前一篇《SQL Server中With As的介绍与应用(二)--递归的使用》我们介绍了一下SQL中With As的递归应用,本章我们直接通过递归的方式实战操作一下,看看使用的效果。
Vaccae
2019/07/24
1.6K0
HiveSQL-面试题033 存在销售额连续3天增长的商户
有一张订单记录表 t_order_033 包含 订单ID(order_id),商户ID(shop_id),订单时间(order_time)和订单金额(order_amt),请查询出过去至少存在3天销售额连续增长的商户
数据仓库晨曦
2024/01/08
3180
HiveSQL-面试题033  存在销售额连续3天增长的商户
推荐阅读
相关推荐
图解面试题:如何找到破产玩家?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档