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

SQL面试题练习 —— 波峰波谷

来源:字节今日头条

目录

  • 1 题目
  • 2 建表语句
  • 3 题解

1 题目


有如下数据,记录每天每只股票的收盘价格,请查出每只股票的波峰和波谷的日期和价格;

在这里插入图片描述

波峰定义:股票价格高于前一天和后一天价格时为波峰
波谷定义:股票价格低于前一天和后一天价格是为波谷

2 建表语句


CREATE TABLE t_stock_test (ts_code VARCHAR(20) COMMENT '股票代码',trade_date VARCHAR(20) COMMENT '交易日期',close FLOAT COMMENT '收盘价'
);
INSERT INTO `t_stock_test` VALUES 
('000001.SZ','20220104',16.66),
('000002.SZ','20220104',20.49),
('000001.SZ','20220105',17.15),
('000002.SZ','20220105',21.17),
('000001.SZ','20220106',17.12),
('000002.SZ','20220106',21.05),
('000001.SZ','20220107',17.2),
('000002.SZ','20220107',21.89),
('000001.SZ','20220110',17.19),
('000002.SZ','20220110',22.16),
('000001.SZ','20220111',17.41),
('000002.SZ','20220111',22.3),
('000001.SZ','20220112',17),
('000002.SZ','20220112',22.05),
('000001.SZ','20220113',16.98),
('000002.SZ','20220113',21.53),
('000001.SZ','20220114',16.33),
('000002.SZ','20220114',20.7),
('000001.SZ','20220117',16.22),
('000002.SZ','20220117',20.87);

样例结果

在这里插入图片描述

3 题解


需要比较当天价格与前一天、后一天的价格进行比较,常规想法为进行关联,股票ID相等、日期为当天日期减1,为前一天价格,日期为当天价格加1,为后一天价格,然后进行计算;简化方法为使用 lag 和 lead 函数,可以避免进行表关联;

  • lag()函数
    • LAG(col,n,DEFAULT) 用于统计窗口内往上第 n 行。参数1为列名,参数2为往上第 n 行(可选,默认为1),参数3为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)
  • lead()函数
    • LEAD(col,n,DEFAULT) 用于统计窗口内往下第 n 行。参数1为列名,参数2为往下第 n 行(可选,默认为1),参数3为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)
select ts_code,trade_date,case when close> last_close and close>next_close then '波峰' else '波谷' end as type
from 
(select*,lag(close,1)over(partition by ts_code order by trade_date) last_close,lead(close,1)over(partition by ts_code order by trade_date) next_close 
from t_stock_test)t
where (close> last_close and close>next_close) 
or (close< last_close and close<next_close);

相关文章:

  • 蛮力法0/1背包问题实验
  • Python 渗透测试:Redis 数据库 弱密码测试.(6379端口)
  • python-数据分析与可视化基础
  • 已有yarn集群部署spark
  • hot100 -- 回溯(上)
  • 利用Python去除PDF水印
  • 前端基础入门三大核心之HTML篇:深入理解重绘与重排 —— 概念、区别与实战演练
  • vue 纵向滚动菜单, 点击滚动到选中菜单
  • 【项目托管git】本地项目托管到 Gitee
  • 机器学习-决策树算法
  • IDEA连接MySQL后如何管理数据库
  • JavaSE——类和对象(二)~~封装
  • 光耦合器的特性和应用概述
  • Mac电脑太卡了怎么办 Mac电脑常见问题 cleanmymacX有必要买吗
  • tensorflow下载
  • “大数据应用场景”之隔壁老王(连载四)
  • 【知识碎片】第三方登录弹窗效果
  • 2017前端实习生面试总结
  • canvas 高仿 Apple Watch 表盘
  • k个最大的数及变种小结
  • Material Design
  • React-flux杂记
  • Redis 懒删除(lazy free)简史
  • ViewService——一种保证客户端与服务端同步的方法
  • Vue UI框架库开发介绍
  • Vue--数据传输
  • Web设计流程优化:网页效果图设计新思路
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 算法---两个栈实现一个队列
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 在Mac OS X上安装 Ruby运行环境
  • No resource identifier found for attribute,RxJava之zip操作符
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • # 数仓建模:如何构建主题宽表模型?
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #define、const、typedef的差别
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (~_~)
  • (160)时序收敛--->(10)时序收敛十
  • (7) cmake 编译C++程序(二)
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)大道至简,职场上做人做事做管理
  • (转)可以带来幸福的一本书
  • (自用)gtest单元测试
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET Windows:删除文件夹后立即判断,有可能依然存在