sql - SQL)我似乎无法弄清楚如何使用 Lead() 方法比较 SQL 中的连续行
问题描述
我的数据库包括每个工作日的每个股票 [daily_price]:
库存 | 日期 | 价格 |
---|---|---|
苹果 | 2018-06-01 | 100 美元 |
苹果 | 2018-06-02 | 130 美元 |
苹果 | 2018-06-03 | 143 美元 |
苹果 | 2018-06-04 | 286 美元 |
... | ... | ... |
谷歌 | 2021-03-13 | 3000 美元 |
谷歌 | 2021-03-14 | 3900 美元 |
谷歌 | 2021-03-15 | 7800 美元 |
谷歌 | 2021-03-16 | 3900 美元 |
... | ... | ... |
我想做一个如下所示的查询:
(试图查看未来 3 天 D+1 上涨超过 30% 的股票的走势)
库存 | 从 | 至 | D+1 % | D+2 % | D+3 % |
---|---|---|---|---|---|
苹果 | 2018-06-02 | 2018-06-04 | +30% | +10% | +100% |
苹果 | 2021-03-14 | 2021-03-16 | +30% | +100% | -50% |
我的查询[试图使用lead()]如下:
WITH comparing_price AS (
SELECT
CODE, DATE, OPEN, high, low, close, volume,
LEAD(daily_price, 1) OVER (PARTITION BY CODE ORDER BY DATE) AS x1,
LEAD(daily_price, 2) OVER (PARTITION BY CODE ORDER BY DATE) AS x2,
LEAD(daily_price, 3) OVER (PARTITION BY CODE ORDER BY DATE) AS x3
FROM daily_price x0
)
SELECT
x0.code as 'Stock',
x1.date as 'From',
x3.date as 'To',
100*(x1.close - x0.close)/x0.close AS 'D+1 %',
100*(x2.close - x1.close)/x1.close AS 'D+2 %',
100*(x3.close - x2.close)/x2.close AS 'D+2 %'
FROM
comparing_price
WHERE
100*(x1.close - x0.close)/x0.close >= '30';
My Table 的主键是来自 [daily_price] 数据库的股票名称 [代码] 和日期 [日期]。
它给了我 SQL 错误 1054:“字段列表”中的未知列“daily_price”
解决方案
您的别名已关闭并且到处都是。但是,您甚至不需要在这里使用表别名,因为只涉及一个表/CTE。试试这个版本:
WITH comparing_price AS (
SELECT
CODE, DATE, OPEN, high, low, close, volume,
LEAD(daily_price, 1) OVER (PARTITION BY CODE ORDER BY DATE) AS x1,
LEAD(daily_price, 2) OVER (PARTITION BY CODE ORDER BY DATE) AS x2,
LEAD(daily_price, 3) OVER (PARTITION BY CODE ORDER BY DATE) AS x3
FROM daily_price
)
SELECT
CODE AS Stock,
DATE AS `From`,
DATE + INTERVAL 2 DAY AS `To`,
100*(x1 - x0) / x0 AS `D+1 %`,
100*(x2 - x1) / x1 AS `D+2 %`,
100*(x3 - x2) / x2 AS `D+2 %`
FROM comparing_price
WHERE
100*(x1 - x0) / x0 >= 30;
推荐阅读
- python - 如何根据我的训练 csv 文件中的文件名将文件夹中的图像分隔到训练文件夹
- spartacus-storefront - 如何在 Spartacus 店面中创建和使用自定义 API?
- c - SSL_read 函数的错误代码卡住了我
- python - Python,熊猫 DF。从字符串中获取数字并将其添加到新列
- c# - 处置 HttpResponseMessage 是好习惯吗?
- javascript - 检测输入元素的属性(类型)变化
- python - 在不使用任何导入的情况下将字符串拆分为单词和标点符号
- ios - 了解使用新的 async/await API 获取 CKRecords 的结果
- spring-boot - 从配置文件更新密钥斗篷
- json - 使用颤振从嵌套的 JSON 中检索一些数据