如何创建关联拆股股息表的SQL表,计算带条件的股票涨跌幅百分比列
股票日度涨跌幅(含拆股、股息调整)查询参考
核心整合逻辑
- 以
agg表为基础,通过左连接关联split、div两张表,关联条件为股票代码sname和交易日期date,无对应拆股/股息记录的日期,相关字段自动返回NULL,符合仅在事件发生日引入数据的要求 - 计算涨跌幅前,可判断拆股、股息字段是否非空,仅在有对应记录时启用调整逻辑,不影响普通交易日的计算逻辑
参考SQL代码
create table daily as with agg_with_event as ( -- 第一步:关联交易数据和拆股、股息事件数据 select a.date, a.sname, a.open, a.high, a.low, a.close, a.volume, s.pre as split_pre, s.post as split_post, d.dividend from agg a -- 左连接拆股表,仅匹配到拆股记录时才有值 left join split s on a.sname = s.sname and a.date = s.date -- 左连接股息表,仅匹配到股息记录时才有值 left join div d on a.sname = d.sname and a.date = d.date ), prevclose as ( -- 第二步:取每只股票前一交易日的收盘价 select *, lag(close) over (partition by sname order by date) pclose from agg_with_event ) -- 第三步:计算调整后涨跌幅 select *, -- 此处可根据业务需求自定义复权调整逻辑,仅当split_pre、dividend非空时触发对应调整 100.0*(close - /* 调整前收盘价的逻辑示例: case when split_pre is not null then pclose * split_post / split_pre when dividend is not null then pclose - dividend else pclose end */ pclose )/(case when pclose=0 then null else pclose end) as prcnt from prevclose a where pclose != 0;
注意:原代码中分区字段误写为
symbol,需和agg表的实际字段sname保持一致,否则会出现分区逻辑错误。
内容的提问来源于stack exchange,提问作者afunnyworld
相关产品推荐
相关产品推荐

