定义:市值增长率=(当日市值-上日市值)/上日市值,
求每日每个客户每只股票的市值增长率
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;