上一个工作日也有数据咋办
时间: 2024-03-22 16:36:54 浏览: 22
如果上一个工作日也有数据,但是不准确,可以考虑使用以下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。如果上一个工作日有多个工作日数据,则取其中的最大值。
相关问题
oracle插入一个表是2023年工作日
在Oracle中,要插入一个表表示2023年的工作日,需要考虑到以下几个方面。
首先,我们需要创建一个包含日期信息的表,可以命名为"工作日表"。这个表将包含一列用于存储日期的字段,以及一个表示是否为工作日的标志列。
接下来,我们需要使用PL/SQL语言编写一个存储过程来计算2023年的工作日,并将它们插入工作日表中。在存储过程中,我们可以使用日期函数和条件语句来判断每一天是否为工作日。
例如,我们可以使用TO_DATE函数将2023年的一月一日转换为日期格式,并使用W格式参数来返回星期几。如果星期几为星期六或星期日,则将标志列设置为"非工作日",否则设置为"工作日"。然后,我们可以使用FOR循环和日期加法运算符来迭代计算一年的工作日,并将这些记录插入工作日表中。
在存储过程编写完成后,我们可以调用它来执行插入操作。可以使用EXECUTE语句来执行存储过程,并指定参数为2023年。执行完毕后,工作日表将包含2023年的所有工作日。
最后,我们可以根据需要查询工作日表,以获取2023年的工作日信息。可以使用SELECT语句来查询工作日表,并指定条件为标志列为"工作日"的记录,从而获取2023年的工作日列表。
综上所述,通过创建工作日表、编写存储过程来计算并插入工作日数据,并使用SELECT语句来查询,我们可以实现插入一个表表示2023年的工作日。
hivesql 拉取工作日数据
HiveSQL是一种基于SQL的查询语言,它可以用来查询和分析大数据。如果你想要拉取工作日的数据,可以通过HiveQL中的日期函数来实现。
具体步骤如下:
1. 首先创建一个表,用于存储你要查询的数据。
2. 在表中添加一个日期类型的列,例如"date",用于存储日期信息。
3. 使用HiveSQL中的日期函数来查询指定日期范围内的数据。例如,使用"date_sub"函数来计算今天的前30天(假设今天是2021年9月1日):
```
select * from table_name where date >= date_sub(current_date, 30) and date <= current_date;
```
上述语句将查询日期在2021年8月1日至2021年9月1日之间的所有数据。
4. 如果你只想查询工作日的数据,可以使用HiveSQL中的"dayofweek"函数来判断日期是不是工作日,然后过滤掉非工作日的数据。例如:
```
select * from table_name where date >= date_sub(current_date, 30) and date <= current_date and dayofweek(date) not in (1, 7);
```
上述语句将查询日期在2021年8月1日至2021年9月1日之间,并且是工作日的所有数据。