微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL) 我似乎无法弄清楚如何使用 Lead() 方法比较 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$
... ... ...

我想进行如下查询

(试图查看在 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 举报,一经查实,本站将立刻删除。