17,086
社区成员
发帖
与我相关
我的任务
分享
SELECT 姓名, Start_HM, End_HM FROM(
SELECT b.姓名, MIN (b.日期) Start_HM, MAX (b.日期) End_HM
FROM (SELECT a.*, ADD_MONTHS(a.日期, ROWNUM * (-1)) cc
FROM (SELECT *
FROM t
ORDER BY 姓名, 日期
) a
) b
GROUP BY b.姓名, b.cc)
WHERE MONTHS_BETWEEN(End_HM,Start_HM) >= 5;
select a.姓名,min(a.日期) 开始日期,max(b.日期)结束日期 from
(select tt.*,row_number()over(partition by 姓名 order by 日期)rn from tt) a,
(select tt.*,row_number()over(partition by 姓名 order by 日期)rn from tt) b
where a.姓名=b.姓名 and
a.日期<=b.日期-4
and b.日期-a.日期=b.rn-a.rn
group by a.姓名
--若每个姓名对应的连续5个月以上的日期只有一段,可以用这个代码
select 姓名,日期 from(
select 姓名,日期,
lag(日期,4)over(partition by 姓名 order by 日期)lg,
lead(日期,4)over(partition by 姓名 order by 日期)ld from tt
)
where 日期=lg+4 or 日期=ld-4
order by 姓名,日期
select 姓名,日期||'-'||(日期+4) 开始日期及结束日期 from(
select 姓名,日期,lead(日期,4)over(partition by 姓名 order by 日期)ld from tt )
where 日期=ld-4