在select端不支持子查询怎么处理
时间: 2024-03-19 20:45:52 浏览: 78
如果您所使用的数据库不支持在 SELECT 子句中使用子查询,可以考虑使用窗口函数来实现。具体的做法是:
1. 使用 LEFT JOIN 将 fact_product_capital 表与 dim_date 表关联,连接条件为 sk_date 字段。
2. 使用 CASE WHEN 函数,对 workday_flag 字段进行判断,如果是工作日,则使用本身的保有capital,否则将保有capital赋值为 NULL。
3. 使用窗口函数,对每个基金的保有capital进行累加,将 NULL 值转换为空前面最近的非空值。这个过程可以使用 LAST_VALUE 函数来实现。
4. 最后使用 GROUP BY 函数,按照基金名称 jjmc 和日期 sk_date 进行分组,对保有capital进行求和。
具体的SQL语句如下所示:
```
SELECT
f.jjmc,
d.sk_date AS date,
SUM(
CASE WHEN d.workday_flag = 1 THEN f.capital ELSE NULL END
) OVER (
PARTITION BY f.jjmc
ORDER BY d.sk_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS holding_capital
FROM
fact_product_capital f
LEFT JOIN dim_date d ON f.sk_date = d.sk_date
```
这样就可以得到每个基金在每个日期的保有capital了,如果是休息日,则保有capital等于上一个工作日的保有capital。
阅读全文