某库表记录了特定日期计划的入库量和入库后的库存,比如 2 月 26 日计划入库 0.6,入库后库存为 3。
现在要根据指定的日期,用计划的入库量和入库后的库存倒推出初始日期,也就是零库存或负库存的那一天,并补上这期间每一天入库前的库存UPDATED_CUSTQTY,最后返回完整数据。比如给定 2 月 26 日,可知当日入库前的库存是 3-0.6=2.4;倒推到上一条记录,2 月 23 日入库前的库存是 2.4-0.6=1.8;直到 2 月 20 日为止,当日原库存是 0。
ITEM | LOC | NEEDDATE | QTY | CUSTQTY | UPDATED_CUSTQTY |
---|---|---|---|---|---|
ABC | XYZ | 2024-02-29 00:00:00 | 0.6 | 3 | |
ABC | XYZ | 2024-02-28 00:00:00 | 0.6 | 3 | |
ABC | XYZ | 2024-02-27 00:00:00 | 0.6 | 3 | |
ABC | XYZ | 2024-02-26 00:00:00 | 0.6 | 3 | 2.4 |
ABC | XYZ | 2024-02-23 00:00:00 | 0.6 | 3 | 1.8 |
ABC | XYZ | 2024-02-22 00:00:00 | 0.6 | 3 | 1.2 |
ABC | XYZ | 2024-02-21 00:00:00 | 0.6 | 3 | 0.6 |
ABC | XYZ | 2024-02-20 00:00:00 | 0.6 | 3 | 0.0 |
ABC | XYZ | 2024-02-19 00:00:00 | 0.6 | 3 | |
ABC | XYZ | 2024-02-16 00:00:00 | 0.6 | 3 | |
ABC | XYZ | 2024-02-15 00:00:00 | 0.6 | 3 | |
ABC | XYZ | 2024-02-14 00:00:00 | 0.6 | 3 | |
ABC | XYZ | 2024-02-13 00:00:00 | 4.8 | 3 |
SQL缺乏天然序号,没有方便的语法表达相对位置,要用多个窗口函数间接实现,代码很难写。SPL 可以直接表示相对位置或绝对位置:https://try.esproc.com/splx?3FZ
A1:加载数据,按日期逆序排序,新增计算列入库前的库存 UPDATED_CUSTQTY,初值为 null。
A2:过滤出指定日期之前的记录,这些记录引用了 A1 的记录,修改这些记录会影响 A1。
A3:循环修改 A2 的每条记录:如果当前是第 1 条记录,则入库前的库存等于”入库后的库存 - 入库量”,否则等于”上一条入库前的库存 - 入库量”,直到这个值小于 0 为止,结果保留一位小数。 [-1] 表示上一条记录。修改后的 A2 如下:
A4:返回完整数据 A1,其中红框部分是 A2。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有