问题描述
我的数据库包括每个工作日的每只股票 [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;