欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 经典sql题(三)查找股票价格波峰波谷

经典sql题(三)查找股票价格波峰波谷

2024/11/30 5:02:00 来源:https://blog.csdn.net/m0_58076578/article/details/142283682  浏览:    关键词:经典sql题(三)查找股票价格波峰波谷

了解价格的波动情况对市场决策至关重要,本文通过 SQL 查询,演示如何从一个价格数据表中提取价格波动信息,识别出波峰和波谷。我们假设有一个名为 test 的表,包含每个时间点的价格数据。

示例数据

假设我们的 test 表有以下数据:

iddsprice
12023-10-01 08:00:00100
12023-10-01 09:00:00110
12023-10-02 10:00:00105
12023-10-03 11:00:00115
22023-10-01 10:00:00200
22023-10-02 12:00:00190
22023-10-03 14:00:00195
22023-10-04 15:00:00210
32023-10-01 16:00:00300

查询步骤

第一步:计算前后价格

我们将使用窗口函数 LAGLEAD 来获取每个价格点的前后价格。

SELECT id,ds,price,LAG(price, 1) OVER (PARTITION BY id ORDER BY ds) AS lag_price,LEAD(price, 1) OVER (PARTITION BY id ORDER BY ds) AS lead_price
FROM test;

结果(中间表):

iddspricelag_pricelead_price
12023-10-01 08:00:00100NULL110
12023-10-01 09:00:00110100105
12023-10-02 10:00:00105110115
12023-10-03 11:00:00115105NULL
22023-10-01 10:00:00200NULL190
22023-10-02 12:00:00190200195
22023-10-03 14:00:00195190210
22023-10-04 15:00:00210195NULL
32023-10-01 16:00:00300NULLNULL
第二步:识别波峰与波谷

在获取前后价格的基础上,我们接着使用 CASE 语句来标记波峰和波谷。

SELECT id,ds,price,CASE WHEN price > lag_price AND price > lead_price THEN '波峰'WHEN price < lag_price AND price < lead_price THEN '波谷'ELSE '无'END AS price_type
FROM (SELECT id,ds,price,LAG(price, 1) OVER (PARTITION BY id ORDER BY ds) AS lag_price,LEAD(price, 1) OVER (PARTITION BY id ORDER BY ds) AS lead_priceFROM test
) AS subquery;

结果(最终结果):

iddspriceprice_type
12023-10-01 08:00:00100
12023-10-01 09:00:00110波峰
12023-10-02 10:00:00105波谷
12023-10-03 11:00:00115
22023-10-01 10:00:00200
22023-10-02 12:00:00190波谷
22023-10-03 14:00:00195
22023-10-04 15:00:00210
32023-10-01 16:00:00300

完整步骤解析

  1. 计算前后价格

    • 使用 LAGLEAD 函数,基于每个 id 的时间顺序提取前后价格。
  2. 识别波峰与波谷

    • 使用 CASE 语句判断当前价格的波动状态,标记为“波峰”、“波谷”或“无”。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com