当前位置: 首页 > ds >正文

SQL每日一练

题目:在一个有连续日期气温记录的表格中,找出气温比前一天有身高的日期。只需输出日期,升序输出结果。

两个字段:date、temperature

理清解题关键:

  1. 获取前一天的温度:对于每一天,都需要知道前一天的温度值

  2. 进行比较:判断当天温度是否大于前一天温度

  3. 筛选结果:只保留满足条件的日期

方法一:使用SELF JOIN

SELECT t1.date
FROM temperatures t1
INNER JOIN temperatures t2ON DATEDIFF (t1.date,t2.date)=1AND t1.temperature > t2.temperature
ORDER BY t1.date ASC
;

①SELF JOIN

使用自连接SELF JOIN,一张表分为两个表用,(FROM)一个表是当前天的温度,(INNER JOIN)另一个表是对比天的温度。(ON的内容)用前后一天的日期来联合,(AND)并且后一天气温必须大于前一天。

②DATEDIFF函数:

DATEDIFF(date1, date2)
DATEDIFF(较晚日期, 较早日期)

返回date1和date2 之间的天数差(date1-date2),以这里为例,天数差为1则输入为=1;

这个函数找到了前后一天的日期,那么还需要温度方面的大小就得加个AND;

再加上order by的内容就完成题目要求了!

方法二:窗口函数LAG()

这里的逻辑是利用lag函数得到前一行的温度数据,利用子查询从lag函数返回的数据中筛选出后一天温度比前一天温度高的那些日期。

SELECT date
FROM (SELECT date,temperature,LAG(temperature) OVER (ORDER BY date) AS prev_tempFROM temperatures
) t
WHERE prev_temp IS NOT NULL AND temperature > prev_temp
ORDER BY date;

①LAG函数

一个可以帮助你“回头看”上一行(或前几行)的值,而无需使用复杂的自连接的窗口函数。

LAG(column_name, offset, default_value) OVER ([PARTITION BY partition_expression]ORDER BY order_expression [ASC | DESC]
)

必填:column name是想要获取的前一行的值的列名字(比如这里是想获得上一行的温度)

        order by是前一行”和“后一行”是基于哪个字段的顺序来判定的(这里就是基于日期对温度进行排列)

选填:offset是回溯的行数,是要回溯一行两行还是多少行;default_value是第一行前面没有数值的情况下返回什么值。

注意:记得这里的子查询要起一个别名每个派生表都必须有自己的别名,否则会报错。

好的今天记录与分享为以上内容,感谢阅读!

http://www.xdnf.cn/news/18909.html

相关文章:

  • 盲盒经济新风口:盲盒抽谷机小程序系统开发全解析
  • 深度学习-----《PyTorch神经网络高效训练与测试:优化器对比、激活函数优化及实战技巧》
  • Telematics Control Unit(TCU)的系统化梳理
  • 数据结构:红黑树(Red-Black Tree)
  • git开发基础流程
  • Springboot应用如何与SkyWalking集成,并使用Docker进行发布
  • Python爬虫实战:研究amazon-scrapy,构建亚马逊电商数据采集和分析系统
  • 扣子智能体商业化卡在哪?井云系统自动化交易+私域管理,闭环成交全流程拆解
  • 小程序开发指南(四)(UI 框架整合)
  • 机器视觉的3C玻璃盖板丝印应用
  • three.js+WebGL踩坑经验合集(8.3):合理设置camera.near和camera.far缓解实际场景中的z-fighting叠面问题
  • 如何在IDEA中使用Git
  • MyBatis-Plus 快速入门 -常用注解
  • 使用阿里云实现短信注册
  • SAVITECH盛微先进SAVIAUDIO音频解码芯片方案与应用
  • ValueTask 实战指南:解锁 .NET 异步编程的性能秘密
  • window显示驱动开发—混合系统 DDI 和 dList DLL 支持
  • 【P2P】P2P主要技术及RELAY服务实现
  • mac设置鼠标滚轮方向
  • 让清洁更智能,让城市更美好
  • 20、DMA----释放CPU压力,加快传输
  • 无人机航拍数据集|第30期 无人机腰果成熟度目标检测YOLO数据集3098张yolov11/yolov8/yolov5可训练
  • Day8--HOT100--160. 相交链表,206. 反转链表,234. 回文链表,876. 链表的中间结点
  • 艾利特石油管道巡检机器人:工业安全的智能守护者
  • 高通平台wifi--p2p issue
  • leetcode 17.04 消失的数字
  • 理解Vuex的辅助函数,分析mapState、mapGetters、mapMutations和mapActions各个应用场景
  • SQL 语句拼接在 C 语言中的实现与安全性分析
  • 大模型应用实战:构建企业知识库 RAG 系统(含权限控制 + 多轮对话)
  • 无线USB转换器TOS-WLink网盘更新--TOS-WLink使用帮助V1.0.pdf