前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Thinking in SQL系列之:供需分配问题

Thinking in SQL系列之:供需分配问题

作者头像
数据和云
发布2018-03-07 13:57:21
1.1K0
发布2018-03-07 13:57:21
举报
文章被收录于专栏:数据和云

编辑手记:SQL做为一种编程语言,能够满足各类数据处理的需要,关键就在于算法与思维方式。以SQL会友,希望结交更多的数据库、数据分析领域的朋友。

推荐阅读:

Thinking in SQL系列之:数据挖掘K均值聚类算法与城市分级

Thinking in SQL系列之数据挖掘C4.5决策树算法

作者简介:牛超

10多年数据库技术积累,长期从事ORACLE数据库管理与开发工作。精通企业级数据库应用设计、SQL、算法实现、异常分析、性能优化。目前就职于日立咨询(中国)有限公司。Mail:10867910@qq.com

供需分配,简单来说就是你有各种需求,我来个性化供应满足。很多问题都可以转化为此类问题,应用很普遍。比如餐桌上摆满各种茶杯,海碗,主人拿出可乐、雪碧、牛奶、啤酒等各种饮料来招待。直到客人喝饱或者饮料喝完都算供需分配完成。

从2006年第一次接触到货需求分配程序,就思考过一个问题,一个SQL能否处理该问题,当时由于对SQL的掌握程度有限,分析结论是不可以,原因是前一次分配会影响后面的处理,所以只能用ROW BY ROW的方式处理了。之后陆续遇到过类似的供需分配问题,都是采用PLSQL或者其它语言实现。

直到前几年在实现一个ERP系统的PO/RCV接收分配功能时,出于对ORACLE SQL掌握的自信程度。重新思考此类问题时,为了消除行与行之间的依赖,头脑风暴过程想到数字电路有个ALU加法器改进设计,即提前进位加法器通过增加额外的门电路,相临位进位无需等待,从而实现了一个脉冲完成8位加法的并行处理

供需分配,也可以采用类似ALU的改进,将ROW BY ROW的处理方式转换为并行处理。通过提前窥探,无需等待前一次的分配结果,而通过统计函数提前算出之前的分配结果。用一个SQL完全可以搞定。

要完成这个提前窥探,有个前提很重要:有序的供应按照既定顺序分配到需求上,即需求与供应都要有序组合。

以到货分配入库为例,根据到货ID(REV_ID)的顺序以库存组织(ORGANIZATION_ID)和物料(ITEM_ID)维度按照货位优先级将到货数量分配到各个货位的空闲区(容量QUANTITY),比如将REV_ID为5的到货,分配到L2货位,分配数量3,

可以简单表示为: {REV_ID,LOC,ALLOC_QTY} = {5,L2,3}

货位表

到货表

为简化代码量,暂不考虑货位会饱和的情况,如果感兴趣可以自己调整,具体SQL实现如下(个人环境ORACLE XE 11.2):

思路很重要,ALLOC_BOUND块用来界定每个REV_ID与货位区间的范围,还有一段投影列 LAST_ALLOC_QTY 的计算,承上启下至关重要。

如果在做大批次供需分配数据处理时,SQL易于优化,还有个好处就是可以指定并行度

可以看到SQL的输出结果如下,可以关注ORGANIZATION_ID、ITEM_ID、PRIORITY、REV_ID、ALLOC_QTY,最后一列即为分配结果值,可以统计一下分配总量,物料501,502分别是4,17,说明供应量(到货)已经完全被分配:

以上这段脚本曾经被个人用来实现ERP PO/RCV接收分配、到货货位分配、MRP计算过程的PR/自由库存匹配分配、财务成本以及AP/AR往来余额帐龄分配报表,可以说,只要存在供需分配的场景,以上SQL应该都能满足。

总之,Thinking in SQL,数据处理,SQL为王。思路很关键,对于ORACLE,PLSQL永远只是SQL的补充,而非替代品,Row by row means slower and slower。

SQL为我们提供了专注于集合处理的条件,提供了各类SQL监控、优化的手段。如果被我们“碎片化”再嵌入到PLSQL或者其他语言,沦为专门取数据的手段,那就有些背“道”而驰了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Thinking in SQL系列之:数据挖掘K均值聚类算法与城市分级
  • Thinking in SQL系列之数据挖掘C4.5决策树算法
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档