比如20220101 20220102 20220103标志是2为非交易日;这三个日期的交易日是标志为1离它们最近的20220104。怎么把所有发生日期的交易日找到。
这个表看上去是个日历表,所以假定发生日期中间没有日期缺失
with t(发生日期,是否交易日期) as (
select date'2022-01-01',2 from dual union all
select date'2022-01-02',2 from dual union all
select date'2022-01-03',2 from dual union all
select date'2022-01-04',1 from dual union all
select date'2022-01-05',1 from dual union all
select date'2022-01-06',1 from dual union all
select date'2022-01-07',1 from dual union all
select date'2022-01-08',2 from dual union all
select date'2022-01-09',2 from dual union all
select date'2022-01-10',1 from dual
)
select t1.发生日期,
case
when 是否交易日期 = 1 then
发生日期
else
max(发生日期) over(partition by d) + 1
end 交易日期
from (select t.*,
sum(case 是否交易日期
when 2 then
0
else
1
end) over(order by 发生日期) d
from t) t1
把标志是1的每段数据最小时间那天拿出来就是交易日了吧,用排序作差