sql实现如果是工作日,那就取基金产品工作日的保有,非工作日则取上一个工作日的保有,已经有日期维度表,里面包含工作日标记,和上一个工作日字段
时间: 2024-03-19 22:45:19 浏览: 44
可以使用SQL中的CASE语句来实现。具体的实现方式如下:
```
SELECT
fund_product,
CASE
WHEN is_workday = 1 THEN holding
ELSE (
SELECT holding
FROM date_dimension
WHERE date =
(SELECT MAX(date)
FROM date_dimension
WHERE date < t.date AND is_workday = 1)
)
END AS holding
FROM
date_dimension t
```
其中,fund_product是基金产品名称,is_workday为日期维度表中的工作日标记(1代表工作日,0代表非工作日),holding为基金产品在该日期的保有量。在SQL中,CASE语句可以用来根据不同条件执行不同的逻辑。这里,我们使用CASE语句来判断日期是否为工作日,如果是工作日,则直接取对应的保有量;如果不是工作日,则使用子查询来获取上一个工作日的保有量。其中,子查询会查找日期维度表中小于当前日期的最近一个工作日,并返回该工作日的保有量。
相关问题
fact 表有保有,基金名称,日期,date表有日期,工作日标志,sql实现如果是工作日,那就取基金产品工作日的保有,非工作日则取上一个工作日各基金的保有,
可以使用SQL中的CASE语句和子查询来实现。具体的实现方式如下:
```
SELECT
fact.fund_name,
fact.date,
CASE
WHEN date.is_workday = 1 THEN fact.holding
ELSE (
SELECT holding
FROM fact AS f
INNER JOIN date_dimension AS d ON f.date = d.date
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
fact
INNER JOIN date_dimension ON fact.date = date_dimension.date
```
其中,fact表中包含基金产品名称、日期和保有量信息,date_dimension表中包含日期和工作日标志信息。在SQL中,我们使用CASE语句来判断日期是否为工作日,如果是工作日,则直接取对应的保有量;如果不是工作日,则使用子查询来获取该基金在上一个工作日的保有量。子查询中,我们首先使用INNER JOIN将fact表和date_dimension表连接起来,然后根据基金名称和日期限制条件筛选出符合要求的数据,最后按照日期倒序排序并取第一条数据,即可得到上一个工作日的保有量。
dw.fact_product_capital表有保有,基金名称,日期,dim_date表有日期,工作日标志,sql实现如果是工作日,那就取基金产品工作日的保有,非工作日则取上一个工作日各基金的保有
可以使用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表连接起来,然后根据基金名称和日期限制条件筛选出符合要求的数据,最后按照日期倒序排序并取第一条数据,即可得到上一个工作日的保有量。
阅读全文