oracle数据库!连续时间合并显示!

111.png

源数据如图,想要得到如下结果:
    工号           班级        开始时间    结束时间
0100008    机电1120   2013-09     2015-06
0100008    机电3143   2014-09     2017-06

其中月份始终以1月和6月结束,以3月和9月开始,没有其他可能,中间间隔为寒暑假

将同一个班级信息,显示不间断的开始时间和结束时间,若间断,则分条显示。

求大神给个完整sql!

EchooooL 发布于 2019-8-20 14:28
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
EchooooLLv4见习互助
发布于2019-8-20 15:30

with tab1 as (

select '201109' st, '201201' ed, '机电1120' clazz from dual union all

select '201203' st, '201206' ed, '机电1120' clazz from dual union all

select '201209' st, '201301' ed, '机电1120' clazz from dual union all

select '201509' st, '201601' ed, '机电1120' clazz from dual union all

select '201603' st, '201606' ed, '机电1120' clazz from dual union all

select '201109' st, '201201' ed, '机电3143' clazz from dual union all

select '201203' st, '201206' ed, '机电3143' clazz from dual union all

select '201309' st, '201401' ed, '机电3143' clazz from dual 

)

, tab2 as (

select t1.*,

       decode(months_between(to_date(st, 'yyyymm'), to_date(lag(t1.st) over(partition by t1.clazz order by t1.st), 'yyyymm')), 6, null, 1) lg

  from tab1 t1

 order by t1.clazz, t1.st

)

, tab3 as (

select t1.*,

       sum(t1.lg) over(partition by t1.clazz order by t1.st) sm

  from tab2 t1

)

select t1.clazz, t1.sm, min(t1.st)kssj, max(t1.ed)jssj

  from tab3 t1

group by t1.clazz, t1.sm

order by t1.clazz, t1.sm

;


最佳回答
0
吴浩Lv6中级互助
发布于2019-8-20 14:32
select GH,BJMC,KSSJ,JSSJ from 表名 group by BJMC


  • EchooooL EchooooL(提问者) 大哥!!你是认真的吗???
    2019-08-20 14:34 
  • 吴浩 吴浩 回复 EchooooL(提问者) 你这个“显示不间断的开始时间和结束时间”啥意思。
    2019-08-20 14:44 
  • EchooooL EchooooL(提问者) 回复 吴浩 就是说 如果在不考虑寒暑假的情况下 时间不间断 那么同一个班级就合并时间 如果同一个班级 时间中间有间断 那就是两条数据
    2019-08-20 14:48 
最佳回答
0
axingLv6专家互助
发布于2019-8-20 14:36
select 
GH 工号,
BJMC 班级,
MIN(KSSJ) 开始时间,
MAX(JSSJ) 结束时间
FROM
表名
GROUP BY 
GH,
BJMC


  • wd210010 wd210010 他要的不连续的间断显示 实现不了
    2019-08-20 14:39 
  • EchooooL EchooooL(提问者) 回复 wd210010 是的 间断的没考虑! 阿星这个太粗暴了 直接取个最大最小值。。。
    2019-08-20 14:44 
  • axing axing 回复 EchooooL(提问者) 有没有只上了9月到1月,不上3月到6月这种情况,还是说必须一上就会上整个学年
    2019-08-20 14:54 
  • EchooooL EchooooL(提问者) 回复 axing 有的 有只上一学期的情况!
    2019-08-20 14:59 
  • wd210010 wd210010 回复 EchooooL(提问者) 不好写
    2019-08-20 15:09 
最佳回答
0
凌建Lv7高级互助
发布于2019-8-20 14:41
微信xiaoya7674
  • 3关注人数
  • 959浏览人数
  • 最后回答于:2019-8-20 15:30
    请选择关闭问题的原因
    确定 取消
    返回顶部