点击上方「蓝字」关注我们
本文针对车辆班次问题进行详细了分析,其主要采用的方法还是断点重分组方法,该类问题解决的关键点在于根据问题描述的场景及数据特征找出断点,然后根据断点进行重新分组,注意需要判断断点处是归属于上一个周期还是下一个周期,如果排序按照顺序排序断点则归属到下一个阶段中,如果按照倒序排序则断点归属到上一个阶段中,在进行窗口中排序时候需要根据特征做调整。

需求描述



数据准备
with vehicle as(select 1 as id , null as beforeid , 2 as afterid union allselect 2 as id , 1 as beforeid , 3 as afterid union allselect 3 as id , 2 as beforeid , null as afterid union allselect 4 as id , null as beforeid , 5 as afterid union allselect 5 as id , 4 as beforeid , null as afterid union allselect 6 as id , null as beforeid , null as afterid)

分析题意
with vehicle as(select 1 as id , null as beforeid , 2 as afterid union allselect 2 as id , 1 as beforeid , 3 as afterid union allselect 3 as id , 2 as beforeid , null as afterid union allselect 4 as id , null as beforeid , 5 as afterid union allselect 5 as id , 4 as beforeid , null as afterid union allselect 6 as id , null as beforeid , null as afterid)select id, beforeid, afterid, case when afterid is null then 1 else 0 end break_pointfrom vehicle;

with vehicle as(select 1 as id , null as beforeid , 2 as afterid union allselect 2 as id , 1 as beforeid , 3 as afterid union allselect 3 as id , 2 as beforeid , null as afterid union allselect 4 as id , null as beforeid , 5 as afterid union allselect 5 as id , 4 as beforeid , null as afterid union allselect 6 as id , null as beforeid , null as afterid)select id, beforeid, afterid, sum(case when afterid is null then 1 else 0 end ) over(order by id desc) flagfrom vehicle

调整班次顺序
with vehicle as(select 1 as id , null as beforeid , 2 as afterid union allselect 2 as id , 1 as beforeid , 3 as afterid union allselect 3 as id , 2 as beforeid , null as afterid union allselect 4 as id , null as beforeid , 5 as afterid union allselect 5 as id , 4 as beforeid , null as afterid union allselect 6 as id , null as beforeid , null as afterid)select id, beforeid, afterid, flag, dense_rank() over (order by flag desc) vehicle_shifts --按照flag倒序排序进行等位排名from (select id, beforeid, afterid, sum(case when afterid is null then 1 else 0 end) over (order by id desc) flagfrom vehicle) t


小结
往期精彩
会飞的一十六
了解更多公众号内容
扫码二维码关注我们
点一点「在看」支持我们~
文章转载自会飞的一十六,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





