oracle 将时间列表按规则拆分成时间段

dyb1415 2016-05-26 10:58:08
表1

NY GYRS
201509 2
201510 2
201511 3
201512 3
201601 3
201602 2
201603 1
201604 1
201605 1

表2
kssj zzsj
201301 201312
201401 201412
201501 201512
201601

根据表1的GYRS变化和表2的时间段,得到如下结果

kssj zzsj gyrs
201509 201510 2
201511 201512 3
201601 201601 3
201602 201602 2
201603 201605 1



...全文
708 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
覌海雲逺 2016-05-26
  • 打赏
  • 举报
回复
select MIN(NY) kssj,MAX(NY) zzsj,gyrs from 表1 group by substr(ny,1,4),gyrs order by kssj;
dyb1415 2016-05-26
  • 打赏
  • 举报
回复
引用 6 楼 ghx287524027 的回复:
这有一个,但是还有一个小问题

select min(ny) as kssj,max(ny) as zzsj,gyrs from(
	select ny,gyrs,r,row_number() over(partition by gyrs,r order by ny)-rownum d from(
		select ny,gyrs,(select r from (select kssj,zzsj,rownum r from t2) where t1.ny<=zzsj and t1.ny>=kssj) r  from t1 order by ny
	)
) 
group by gyrs,r,d
order by kssj asc;
结果如下: 最后的那个201605没有设置为空
解决了该问题,万分感谢
dyb1415 2016-05-26
  • 打赏
  • 举报
回复
引用 5 楼 nie544917623 的回复:
[quote=引用 3 楼 nie544917623 的回复:] select MIN(NY) kssj,MAX(NY) zzsj,gyrs from (select * from 表1 order by gyrs,ny) group by substr(ny,1,4),gyrs,ny-rownum order by kssj;
select MIN(NY) kssj,MAX(NY) zzsj,gyrs from (select * from 表1 order by gyrs,ny) group by gyrs,ny-rownum order by kssj; 这样更省事,ny-rownum已经包含substr(ny,1,4)了[/quote] 解决了该问题,万分感谢~
dyb1415 2016-05-26
  • 打赏
  • 举报
回复
引用 5 楼 nie544917623 的回复:
[quote=引用 3 楼 nie544917623 的回复:] select MIN(NY) kssj,MAX(NY) zzsj,gyrs from (select * from 表1 order by gyrs,ny) group by substr(ny,1,4),gyrs,ny-rownum order by kssj;
select MIN(NY) kssj,MAX(NY) zzsj,gyrs from (select * from 表1 order by gyrs,ny) group by gyrs,ny-rownum order by kssj; 这样更省事,ny-rownum已经包含substr(ny,1,4)了[/quote] 解决了该问题,万分感谢~
ghx287524027 2016-05-26
  • 打赏
  • 举报
回复
这有一个,但是还有一个小问题

select min(ny) as kssj,max(ny) as zzsj,gyrs from(
select ny,gyrs,r,row_number() over(partition by gyrs,r order by ny)-rownum d from(
select ny,gyrs,(select r from (select kssj,zzsj,rownum r from t2) where t1.ny<=zzsj and t1.ny>=kssj) r from t1 order by ny
)
)
group by gyrs,r,d
order by kssj asc;

结果如下:

最后的那个201605没有设置为空
覌海雲逺 2016-05-26
  • 打赏
  • 举报
回复
引用 3 楼 nie544917623 的回复:
select MIN(NY) kssj,MAX(NY) zzsj,gyrs from (select * from 表1 order by gyrs,ny) group by substr(ny,1,4),gyrs,ny-rownum order by kssj;
select MIN(NY) kssj,MAX(NY) zzsj,gyrs from (select * from 表1 order by gyrs,ny) group by gyrs,ny-rownum order by kssj; 这样更省事,ny-rownum已经包含substr(ny,1,4)了
dyb1415 2016-05-26
  • 打赏
  • 举报
回复
求帮助 实在想不出来了
覌海雲逺 2016-05-26
  • 打赏
  • 举报
回复
select MIN(NY) kssj,MAX(NY) zzsj,gyrs from (select * from 表1 order by gyrs,ny) group by substr(ny,1,4),gyrs,ny-rownum order by kssj;
dyb1415 2016-05-26
  • 打赏
  • 举报
回复
引用 1 楼 nie544917623 的回复:
select MIN(NY) kssj,MAX(NY) zzsj,gyrs from 表1 group by substr(ny,1,4),gyrs order by kssj;
这个查询不能用 如果同一年不同月数但是GYRS一样就不对了 表1 NY GYRS 201509 2 201510 2 201511 3 201512 3 201601 3 201602 2 201603 1 201604 1 201605 3 表2 kssj zzsj 201301 201312 201401 201412 201501 201512 201601 根据表1的GYRS变化和表2的时间段,得到如下结果 kssj zzsj gyrs 201509 201510 2 201511 201512 3 201601 201601 3 201602 201602 2 201603 201604 1 201605 3

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧