我需将一段时间按月分成多段时间,例如2021/07/26----2021/10/25,分成如下3段
2021/07/26---2021/07/25
2021/08/26---2021/08/25
2021/09/26---2021/09/25
上面的SQL我写出来了,但问题是,每个人分别有一段时间,相当于要生成一个森林,而不是一棵单一的树,我如何将内层SQL里的where 条件去掉,得到每个人各自的时段记录呢?
select emid,coid,lcid,level as mon,
decode(to_char(trunc(bdte_r1,'MM'),'YYYY-MM'),
to_char(trunc(add_months(bdte_r1,(LEVEL - 1)),'MM'),'YYYY-MM'),
bdte_r1,
decode(sign(level-2),-1,bdte_r1,add_months(bdte_r2,level-2))
) start_date,
decode(to_char(trunc(edte,'MM'),'YYYY-MM'),
to_char(trunc(add_months(bdte_r1,LEVEL),'MM'),'YYYY-MM'),
edte,
decode(sign(level-1),-1,bdte_r1,add_months(bdte_r2,level-1)) -1
) as end_date
from (
select emid,coid,lcid,
svmn, --month(such as 3,5)
bdte as bdte_r1, --begin date
add_months_new(bdte,1) as bdte_r2,
add_months(bdte,svmn) as edte --end date
from v_hr_m_lsth_all
where rownum <2
)
connect by level <= months_between(edte,bdte_r1)
例如:图1的两条记录,怎么生成图2的记录(上面的SQL只能查一条)