非工作日是有保有的但是不准才导致了这种情况,你再想想
时间: 2024-03-22 20:36:53 浏览: 53
如果非工作日也有保有,但是不准确,可以考虑使用以下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。
阅读全文