今天把题目8:计算时间段内特定范围内的人员组合 题目的答案发一下,话不多说,直接上代码,上面是我造的数据,你们不用纠结
with t1 as ---货车表数据(select 1 as 顺序, 1001 as 车队编号, '张三' as 车主姓名, 10 as 载货量from dualunion allselect 2, 1001, '李四', 15from dualunion allselect 3, 1001, '王五', 10from dualunion allselect 4, 1001, '马六', 30from dualunion allselect 1, 1002, '赵七', 35from dualunion allselect 2, 1002, '钱八', 75from dualunion allselect 1, 1003, '孙九', 100 from dual),t2 as ----货物堆数据(select 1 as 顺序, 1001 as 车队编号, 'a' as 货物堆编号, 20 as 货物量from dualunion allselect 2, 1001, 'b', 8from dualunion allselect 3, 1001, 'c', 12from dualunion allselect 4, 1001, 'd', 7from dualunion allselect 5, 1001, 'e', 9from dualunion allselect 6, 1001, 'f', 9from dualunion allselect 1, 1002, 'g', 10from dualunion allselect 2, 1002, 'h', 80from dualunion allselect 3, 1002, 'i', 20from dualunion allselect 1, 1003, 'j', 100 from dual),t3 as ----从这里开始逻辑处理,对两表数据求累计和和标记(select t.*,sum(载货量)over(partition by 车队编号 order by 顺序) as 累计载货,1 as flagfrom t1 tunion allselect t.*,sum(货物量)over(partition by 车队编号 order by 顺序) as 累计载货,0 as flagfrom t2 t),t4 as --对数据进行求差,(select t.*,t.累计载货-lag(t.累计载货,1,0)over(partition by t.车队编号 order by t.累计载货) as 装入,sum( flag )over(partition by 车队编号 order by 累计载货,flag )+decode(flag,0,1,0) as flag1,sum( decode(flag,0,1,0) )over(partition by 车队编号 order by 累计载货,flag )+flag as flag2from t3 t) ---下面就是关联两表得到车主姓名和货物堆编号select t.车队编号,t1.车主姓名,t2.货物堆编号,t.装入from t4 t join t1 on t.车队编号=t1.车队编号 and t.flag1=t1.顺序 join t2 on t.车队编号=t2.车队编号 and t.flag1=t2.顺序where t.装入>0
刚开始编写文章,很多地方都有不足,希望以后可以为大家贡献出更好的文章,谢谢大家!有哪里不明白的地方可以和作者联系〜
没有关注的也可以关注下公众号〜再次感谢



最后修改时间:2021-04-19 17:16:50
文章转载自SQL大数据开发,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




