当前位置: 首页 > 面试经验 >

字节跳动面试SQL-股票的波峰和波谷

优质
小牛编辑
79浏览
2024-07-27

字节跳动面试SQL-股票的波峰和波谷

推荐阅读文章列表

大数据开发面经汇总【持续更新...】

我的大数据学习之路

大数据开发面试笔记V6.0

SQL题目

来自今日头条数据研发一面

  • 有一张股票交易价格表ods_stock_trd_log, 包含sto_code(股票代码)、trade_dt(交易日期)以及price(交易价格)
  • 问题:求出每只股票对应的波峰和波谷
    • 波峰:股票价格高于前一天和后一天价格时
    • 波谷:股票价格低于前一天和后一天价格时

答案解析

模拟数据

INSERT INTO ods_stock_trd_log VALUES 
('001','20220104',11.06),
('002','20220104',16.12),
('001','20220105',15.15),
('002','20220105',14.15),
('001','20220106',12.32),
('002','20220106',12.08),
('001','20220107',16.28),
('002','20220107',14.56)
;

思路分析

难点:如何获取上一个交易日和后一个交易日的股票价格

  1. 获取所有股票交易日期前一个日期对应的价格X以及后一个日期对应的价格Y
  2. 如果当前股票价格高于X和Y,那么此时即为波峰,反之,如果当前股票价格低于X和Y,那么此时即为波谷

具体代码

select
    sto_code,
    trade_dt,
    case 
        when price > last_price and price > next_price then '波峰'
        when price < last_price and price < next_price then '波谷' 
    else '' end as flag
from (
        select
            *,
            -- 取向上一行的数据
            lag(price, 1) over(partition by sto_code order by trade_dt) last_price,
            -- 取向下一行的数据
            lead(price, 1) over(partition by sto_code order by trade_dt) next_price 
        from ods_stock_trd_log
) t
where (price > last_price and price > next_price)  -- 波峰
or (price < last_price and price < next_price) -- 波谷
;

#校招过来人的经验分享##数据人的面试交流地#
 类似资料: