求一sql

zzxiaoma 2013-06-21 05:18:05
表A
id jsbh sj1 sj2
1 s-001 2013-1-1 2013-1-3
2 s-002 2013-1-2 2013-1-2
3 s-003 2013-2-2 2013-2-3


表B
id hhbh bh
1 s-001、s-002 b-001
2 s-002 b-002
3 s-002、s-003 b-003


想要的结果
id bh hhbh sj1 sj2
1 b-001 s-001、s-002 2013-1-2 2013-1-3
2 b-002 s-002 2013-1-2 2013-1-2
3 b-003 s-002、s-003 2013-2-2 2013-2-3

前3列是表B中的列,后面2个时间取hhbh包含jsbh中的最晚时间,
比如b-001包含s-001、s-002,在结果中sj1和sj2取得是sj1和sj2之间最晚的时间
...全文
187 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sych888 2013-06-21
  • 打赏
  • 举报
回复
换个函数写一下: with tt1 as( select 1 id,'s-001' jsbh,'2013-1-1' sj1,'2013-1-3' sj2 from dual select 2,'s-002','2013-1-2','2013-1-2' from dual union select 3,'s-003','2013-2-2','2013-2-3' from dual ), tt2 as( select 1 id,'s-001、s-002' hhbh,'b-001' bh from dual union select 2,'s-002','b-002' from dual union select 3,'s-002、s-003','b-003' from dual ) select tt2.id,tt2.bh,tt2.hhbh,max(tt1.sj1),max(tt1.sj2) from tt1,tt2 where instr(tt2.hhbh,tt1.jsbh)>0 group by tt2.id,tt2.bh,tt2.hhbh order by tt2.id;
u010412956 2013-06-21
  • 打赏
  • 举报
回复
这个应该挺简单的吧,就是2表关联 去取 最大值。。。
select b.id, b.bh, b.hhbh, max(sj1) sj1, max(sj2) sj2
  from b, a
 where regexp_like(b.hhbh, a.jsbh)
 group by b.id, b.bh, b.hhbh
 order by b.id;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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