dw.fact_product_capital表有保有,基金名称,日期,dim_date表有日期,工作日标志,sql实现如果是工作日,那就取基金产品工作日的保有,非工作日则取上一个工作日各基金的保有
时间: 2024-03-19 09:45:25 浏览: 132
DW.rar_Dwmas_SEXMEX_mas_sex_sex mex com
5星 · 资源好评率100%
可以使用SQL中的CASE语句和子查询来实现。具体的实现方式如下:
```
SELECT
fact.fund_name,
fact.date,
CASE
WHEN date.is_workday = 1 THEN fact.holding
ELSE (
SELECT holding
FROM dw.fact_product_capital AS f
INNER JOIN dim_date AS d ON f.date_key = d.date_key
WHERE f.fund_name = fact.fund_name
AND d.is_workday = 1
AND d.date < fact.date
ORDER BY d.date DESC
LIMIT 1
)
END AS holding
FROM
dw.fact_product_capital AS fact
INNER JOIN dim_date ON fact.date_key = dim_date.date_key
```
其中,dw.fact_product_capital表中包含基金产品名称、日期和保有量信息,dim_date表中包含日期和工作日标志信息。在SQL中,我们使用CASE语句来判断日期是否为工作日,如果是工作日,则直接取对应的保有量;如果不是工作日,则使用子查询来获取该基金在上一个工作日的保有量。子查询中,我们首先使用INNER JOIN将dw.fact_product_capital表和dim_date表连接起来,然后根据基金名称和日期限制条件筛选出符合要求的数据,最后按照日期倒序排序并取第一条数据,即可得到上一个工作日的保有量。
阅读全文