如果是工作日,取各基金工作日的保有capital,非工作日取上面最近的工作日的保有,已经有fact_product_capital表包含字段基金名称JJMC,保有capital,日期sk_date ,日期维度表dim_date 包含字段:日期sk_date,工作日标记workday_flag
时间: 2024-03-21 13:38:44 浏览: 125
可以使用 SQL 语句来实现这个需求。具体的实现步骤如下:
1. 首先,需要将日期维度表和基金保有量表按照日期进行关联,得到每个基金在每个日期的保有量。关联条件为:日期维度表的日期和基金保有量表的日期相等,并且基金名称相等。
```sql
SELECT
dim_date.sk_date,
fact_product_capital.JJMC,
fact_product_capital.capital
FROM
dim_date
JOIN fact_product_capital ON dim_date.sk_date = fact_product_capital.sk_date AND dim_date.workday_flag = 1
```
2. 接着,使用窗口函数和 COALESCE 函数计算出每个非工作日的最近一个工作日,然后再将这个日期和基金名称关联起来,得到最终的结果。
```sql
SELECT
dim_date.sk_date,
fact_product_capital.JJMC,
COALESCE(fact_product_capital.capital, last_capital.capital) AS capital
FROM
dim_date
JOIN fact_product_capital ON dim_date.sk_date = fact_product_capital.sk_date AND dim_date.workday_flag = 1
LEFT JOIN (
SELECT
JJMC,
sk_date,
capital,
ROW_NUMBER() OVER (PARTITION BY JJMC ORDER BY sk_date DESC) AS rn
FROM
fact_product_capital
WHERE
sk_date < '2021-01-01' AND JJMC = '基金名称'
) last_capital ON dim_date.sk_date = last_capital.sk_date AND fact_product_capital.JJMC = last_capital.JJMC AND last_capital.rn = 1
WHERE
dim_date.sk_date >= '2021-01-01'
```
上述 SQL 语句中,`fact_product_capital` 表是基金保有量表,`dim_date` 表是日期维度表,`JJMC` 是基金名称,`capital` 是保有量,`sk_date` 是日期,`workday_flag` 是工作日标记。需要根据具体的数据结构和业务逻辑来调整 SQL 语句中的表名、字段名和条件。
阅读全文