​【题目】

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

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

例如需要返回一下结果:

【解题思路】

1.交叉联结

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

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

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

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

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

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

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

daffdate(日期1, 日期2):
得到的结果是日期1与日期2相差的天数。
如果日期1比日期2大,结果为正;如果日期1比日期2小,结果为负。

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

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

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进行操作。

代码部分:

elect *
from 日销 as a cross join 日销 as b on datediff(a.日期, b.日期) = 1;

得到结果:

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

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

得到结果:

4.删掉多余数据

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

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

select a.ID, a.日期, a.销售额(万元)
from 日销 as a cross join 日销 as b on datediff(a.日期, b.日期) = 1
where a.销售额(万元) > b.销售额(万元);

或者

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和日期

参考答案:

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;

或者:

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;

得到结果:

推荐:如何从零学会人工智能必备技能:数据库和sql?

sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据?相关推荐

  1. sql server 中获取前一天日期_图解面试题:如何比较日期数据?

    ​[题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意 ...

  2. groovy怎样从sql语句中截取表名_《SQL基础教程》学习笔记

    第1章 数据库和SQL 1-3 SQL概要 SQL语句及其种类 DDL-CREATE,DROP,ALTER DML-SELECT,INSERT,UPDATE,DELETE DCL-COMMIT,ROL ...

  3. SQL Server 中获取字符串拼音的标量函数实现

    工作中时常遇到字符串转换为拼音的需求.特别目前在各大网站平台都可以看到的基于拼音的查询功能.如果在查询中增加相应的拼音查询,就可以减少很多的因中文汉字完全输入的不便利,例如:当我要查询叫"郭 ...

  4. sql server作业_在SQL Server中报告作业失败并发出警报

    sql server作业 SQL Server Agent can be used to run a wide variety of tasks within SQL Server. The buil ...

  5. 转储sql文件_在Linux上SQL Server中更改SQL转储文件位置

    转储sql文件 In this article, we will talk about SQL Dump files and the process to change the dump direct ...

  6. sql server序列_在SQL Server中实现序列聚类

    sql server序列 In this article, we will be discussing Microsoft Sequence Clustering in SQL Server. Thi ...

  7. sql server死锁_了解SQL Server中的死锁定义

    sql server死锁 This article explains the deadlock definition in SQL Server, and it also mentions how t ...

  8. 如何在SQL Server中自动进行表分区

    In this article, we will demonstrate specific ways to automate table partitioning in SQL Server. Thi ...

  9. SQL Server中的查询优化技术:提示和技巧

    描述 (Description) Fixing bad queries and resolving performance problems can involve hours (or days) o ...

最新文章

  1. 试编写一个将双向循环链表逆置的算法_循环双向链表在电路计算中的应用
  2. maven package 知识(转载)
  3. 2013第四届蓝桥杯Java组省赛题解析
  4. Android应用程序结构总结
  5. discuz! X3 更改域名全程记录 (修改域名的方法)
  6. 125 Valid Palindrome
  7. 剑指offer——python【第54题】字符流中第一个不重复的字符
  8. S/4 HANA中的数据库锁策略
  9. Go 语言的垃圾回收算法被吹过头?与Java比如何?
  10. 21天c语言 ppt,21天学通C语言 第1章 C语言与程序概述.ppt
  11. matlab2018a怎么读取nc文件,[转]matlab批量读取nc文件
  12. 日常开支记账,自动统计用它就够了
  13. css 中的度量单位
  14. ASCII表完整版(包含16进制对应表)——看看16进制与10进制的转化
  15. MySQL数据库技术
  16. fpu测试_【测试】拯救者Y9000X性能amp;散热数据
  17. 让mysql支持emoji表情_让MySQL支持Emoji表情 mysql 5.6
  18. 炫龙笔记本的gtx965m显卡玩游戏很卡
  19. xLua热更新(一)xLua基本使用
  20. 【转】 关于显著性检验,你想要的都在这儿了!!(基础篇)

热门文章

  1. 神经网络的分类准确率是连续的吗?
  2. 2.5 导数-深度学习-Stanford吴恩达教授
  3. 每天学习python 30分钟 -了解python - 看懂#!/usr/bin/python
  4. linux HZ Tick Jiffies
  5. 中国移动手机网络私有网络连接问题解决办法
  6. cmd命令行修改windows虚拟内存pagefile.sys
  7. XML::Simple与Data::Dumper在Perl中的使用
  8. 【全栈项目上线(vue+node+mongodb)】06.nodejs服务上线(生产环境前后分离的vue项目中怎么解决跨域问题)...
  9. java 常见中文乱码问题解决
  10. Python -- dict 类