求每日每个客户每只股票的市值增长率

文章介绍了两种计算每日每个客户每只股票市值增长率的方法。一种是使用SQL的lag窗口函数,通过在数据集上分区并按日期排序来获取前一天的市值,然后计算增长率。另一种方法是使用自关联,将数据表与自身连接,找到对应日期前一天的市值进行计算。这两种方法都用于跟踪和分析股票投资的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义:市值增长率=(当日市值-上日市值)/上日市值,
求每日每个客户每只股票的市值增长率

    init_date    INTEGER COMMENT '日期',
    clinet_id    VARCHAR(20) COMMENT '客户号',
    stock_code   VARCHAR(6) COMMENT '股票代码',
    market_value NUMERIC(38, 20) COMMENT '持仓市值'

  • 思路1: lag窗口函数
-- 建表
CREATE OR REPLACE TEMPORARY VIEW
    stock(init_date, client_id, stock_code, market_value)
AS
VALUES ('2021-09-01', 1, '001', 100),
       ('2021-09-02', 1, '001', 200),
       ('2021-09-03', 1, '001', 300),
       ('2021-09-01', 1, '002', 500),
       ('2021-09-02', 1, '002', 400),
       ('2021-09-03', 1, '002', 300),
       ('2021-09-01', 2, '003', 100),
       ('2021-09-02', 2, '003', 200),
       ('2021-09-03', 2, '003', 300);


WITH t1 AS (SELECT *, LAG(market_value) OVER (PARTITION BY client_id,stock_code ORDER BY init_date) last_day
            FROM stock)
SELECT *, (market_value - last_day) / last_day rate
FROM t1;

思路2 : 自关联
SELECT s1.*,
       s2.market_value                                       last_day_value,
       (s1.market_value - s2.market_value) / s2.market_value incre_rate
FROM stock s1
         LEFT JOIN stock s2
                   ON s1.client_id = s2.client_id
                       AND s1.stock_code = s2.stock_code
                       AND DATE_SUB(s1.init_date, 1) = s2.init_date;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lucky bigdata

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值