不是,周末的capital为空,需要将休息日的保有取到上一个工作日的保有
时间: 2024-03-19 21:45:50 浏览: 58
Mega Expo沽空报告(涉黄)-Blue Orca Capital-46页.rar
非常抱歉,我理解错误了您的问题。那么您需要根据工作日标记以及日期计算每个基金在每个日期的保有capital,如果是休息日,则需要取上一个工作日的保有capital,是吗?
那么可以按照以下步骤进行计算:
1. 使用 LEFT JOIN 将 fact_product_capital 表与 dim_date 表关联,连接条件为 sk_date 字段。
2. 使用 CASE WHEN 函数,对 workday_flag 字段进行判断,如果是工作日,则使用本身的保有capital,否则使用上一个工作日的保有capital。为了实现这个功能,可以使用子查询实现。
3. 使用 GROUP BY 函数,按照基金名称 jjmc 和日期 sk_date 进行分组,对保有capital进行求和。
具体的SQL语句如下所示:
```
SELECT
f.jjmc,
d.sk_date AS date,
SUM(
CASE WHEN d.workday_flag = 1 THEN f.capital ELSE (
SELECT capital
FROM fact_product_capital
WHERE jjmc = f.jjmc
AND sk_date < d.sk_date
AND workday_flag = 1
ORDER BY sk_date DESC
LIMIT 1
) END
) AS holding_capital
FROM
fact_product_capital f
LEFT JOIN dim_date d ON f.sk_date = d.sk_date
GROUP BY
f.jjmc,
d.sk_date
```
这样就可以得到每个基金在每个日期的保有capital了。
阅读全文