非工作日是有保有的但是不准才导致了这种情况,你再想想
时间: 2024-03-22 10:36:53 浏览: 25
如果非工作日也有保有,但是不准确,可以考虑使用以下SQL语句:
```
SELECT
sk_date,
jjmc,
CASE WHEN workd_flag = 1 THEN capital ELSE MAX(CASE WHEN workd_flag = 1 THEN capital ELSE NULL END) OVER (PARTITION BY jjmc ORDER BY sk_date ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) END AS capital
FROM
dw.fact_product_capital
JOIN 日期表 ON dw.fact_product_capital.sk_date = 日期表.sk_date
```
在非工作日,使用窗口函数MAX来获取上一个工作日的保有。在获取过程中,通过ROWS BETWEEN指定了窗口函数的范围,从UNBOUNDED PRECEDING(窗口开始)到1 PRECEDING(上一个工作日)。如果上一个工作日也没有数据,则MAX函数返回NULL。
相关问题
sql实现如果是工作日,那就取工作日的保有,非工作日则取上一个工作日的保有,已经有日期维度表,里面包含工作日标记,和上一个工作日字段
可以使用SQL中的CASE WHEN语句来实现该需求。具体实现如下:
```sql
SELECT
t1.date,
CASE
-- 如果当天是工作日,则直接取该天的保有
WHEN t1.is_workday = 1 THEN t1.holding
-- 如果当天不是工作日,则取上一个工作日的保有
ELSE (
SELECT t2.holding
FROM date_dimension t2
WHERE t2.is_workday = 1
AND t2.date < t1.date
ORDER BY t2.date DESC
LIMIT 1
)
END AS holding
FROM date_dimension t1
```
其中,`date_dimension`是日期维度表,包含日期、工作日标记和上一个工作日字段。`is_workday`字段为1表示当天是工作日,为0表示不是工作日。上一个工作日字段可以根据实际情况进行计算得出。
以上SQL语句会根据日期维度表中的工作日标记和上一个工作日字段来判断当天是否为工作日,如果是工作日则直接取当天的保有,否则就找到上一个工作日并取其保有。
sql实现如果是工作日,那就取基金产品工作日的保有,非工作日则取上一个工作日的保有,已经有日期维度表,里面包含工作日标记,和上一个工作日字段
可以使用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语句来判断日期是否为工作日,如果是工作日,则直接取对应的保有量;如果不是工作日,则使用子查询来获取上一个工作日的保有量。其中,子查询会查找日期维度表中小于当前日期的最近一个工作日,并返回该工作日的保有量。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)