日期维度表有工作日标志,怎么用sql实现到期日加60个工作日
时间: 2024-03-17 13:43:24 浏览: 27
如果您的日期维度表中已经有了工作日标志,那么添加60个工作日就会简单很多。以下是一个示例代码:
```sql
SELECT DATEADD(DAY, 60, expire_date) AS new_expire_date
FROM your_table
WHERE workday_flag = 1;
```
其中,`your_table`是存储到期日的表的名称,`expire_date`是到期日的日期字段,`workday_flag`是日期维度表中表示工作日的标志字段。上述代码将仅在日期维度表中的日期是工作日时才将60个工作日添加到到期日,从而得到新的到期日。
相关问题
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语句会根据日期维度表中的工作日标记和上一个工作日字段来判断当天是否为工作日,如果是工作日则直接取当天的保有,否则就找到上一个工作日并取其保有。
2019年4月3日往后推60个工作日的日期
根据你的要求,可以使用以下 SQL 语句计算从 2019 年 4 月 3 日往后推 60 个工作日的日期:
```
WITH date_dim AS (
SELECT sk_date, workday_flag, workday_no
FROM dw.dim_date
WHERE workday_flag = 1
AND sk_date >= '2019-04-03'
), date_range AS (
SELECT
d1.sk_date AS start_date,
d2.sk_date AS end_date
FROM
date_dim d1
JOIN date_dim d2 ON d2.workday_no = d1.workday_no + 60
WHERE
d2.workday_flag = 1
)
SELECT start_date, end_date
FROM date_range;
```
该 SQL 语句与之前提供的 SQL 语句类似,使用 CTE 子句和窗口函数计算从 2019 年 4 月 3 日往后推 60 个工作日的日期范围,并且自动跳过周末和节假日,只计算工作日。其中,date_dim 子查询表示从 2019 年 4 月 3 日开始的工作日序号和工作日标记,date_range 子查询表示从起始日期开始往后推 60 个工作日的日期范围。
需要注意的是,该 SQL 语句的计算结果可能会受到日期维度表的数据范围和精度的影响,因此需要对日期维度表的数据进行检查和确认。同时,该语句只能计算从起始日期开始往后推 60 个工作日的日期,如果需要计算其他日期范围的工作日,需要修改对应的连接条件和查询条件。