如何解决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$ |
... | ... | ... |
我想进行如下查询:
(试图查看在 D+1 上涨超过 30% 的股票接下来 3 天的走势)
股票 | 来自 | 至 | 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,2) OVER (PARTITION BY CODE ORDER BY DATE) AS x2,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] 数据库的股票名称 [code] 和日期 [date]。
它给了我 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,2) OVER (PARTITION BY CODE ORDER BY DATE) AS x2,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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。