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

来源:字节今日头条

目录

  • [1 题目](#1 题目)
  • [2 建表语句](#2 建表语句)
  • [3 题解](#3 题解)

1 题目

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

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

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

2 建表语句

sql 复制代码
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)
sql 复制代码
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);
相关推荐
掘金安东尼40 分钟前
深入 Neo4j:从图数据库原理到企业知识引擎的实践指南
数据库·neo4j
TiAmo zhang44 分钟前
SQL Server 2019实验 │ 管理SQL Server的安全性
数据库·sqlserver
DokiDoki之父1 小时前
数据库—数据库设计 & 多表查询 & 事务
数据库·sql
武子康1 小时前
Java-151 深入浅出 MongoDB 索引详解 性能优化:慢查询分析 索引调优 快速定位并解决慢查询
java·开发语言·数据库·sql·mongodb·性能优化·nosql
武昌库里写JAVA2 小时前
C语言 #pragma once - C语言零基础入门教程
vue.js·spring boot·sql·layui·课程设计
ZhengEnCi2 小时前
JPA-SQL 语句使用完全指南-自动生成vs手动编写的智能选择策略
java·spring boot·sql
Mr Aokey3 小时前
解决Redis数据丢失难题:深入理解RDB与AOF持久化机制
数据库·redis·缓存
KaiwuDB3 小时前
深度剖析:KWDB SQL 编译与优化策略
数据库
翰林小院3 小时前
【MongoDB】 MongoDB index overview
数据库·mongodb
Albert Edison3 小时前
【MySQL】数据类型
数据库·mysql·adb·oracle