从合计值倒推出初始日期的极简方法

简介: 本文介绍了一种通过计划入库量和入库后库存倒推初始零库存日期的方法,并补充每日入库前的库存(UPDATED_CUSTQTY)。以 2 月 26 日为例,通过逐日倒推计算每条记录的入库前库存,直到找到零或负库存的起始日。传统 SQL 实现复杂,因缺乏天然序号需借助窗口函数。而 SPL 提供更直观的解决方案:加载数据逆序排序、过滤指定日期前记录、循环修改每条记录的入库前库存值,最终返回完整数据,代码简洁高效。

某库表记录了特定日期计划的入库量和入库后的库存,比如 2 月 26 日计划入库 0.6,入库后库存为 3。
image.png
现在要根据指定的日期,用计划的入库量和入库后的库存倒推出初始日期,也就是零库存或负库存的那一天,并补上这期间每一天入库前的库存UPDATED_CUSTQTY,最后返回完整数据。比如给定 2 月 26 日,可知当日入库前的库存是 3-0.6=2.4;倒推到上一条记录,2 月 23 日入库前的库存是 2.4-0.6=1.8;直到 2 月 20 日为止,当日原库存是 0。
image.png
SQL缺乏天然序号,没有方便的语法表达相对位置,要用多个窗口函数间接实现,代码很难写。SPL 可以直接表示相对位置或绝对位置:https://try.esproc.com/splx?3FZ
image.png
A1:加载数据,按日期逆序排序,新增计算列入库前的库存 UPDATED_CUSTQTY,初值为 null。

A2:过滤出指定日期之前的记录,这些记录引用了 A1 的记录,修改这些记录会影响 A1。
5a9ddc599a4fcba6d748160d6849782b_a10011ef75d44fb4a3ebb91a84b061c1_Picture1.png
A3:循环修改 A2 的每条记录:如果当前是第 1 条记录,则入库前的库存等于”入库后的库存 - 入库量”,否则等于”上一条入库前的库存 - 入库量”,直到这个值小于 0 为止,结果保留一位小数。 [-1] 表示上一条记录。修改后的 A2 如下:
46e07f827ff049d97d04a2b64bc3a940_914e5b2fc0ee4077a076faffb4ee76f9_Picture2.png
A4:返回完整数据 A1,其中红框部分是 A2。
1c330e885b46f2397713421beef096dd_ac3e33b50e2f4ac0ab6d6717c48e6edf_Picture3.png
esProcSPL是开源免费的,欢迎前往乾学院下载试用~

目录
打赏
0
12
13
2
76
分享
相关文章
|
11月前
1087 有多少不同的值 (20 分)
1087 有多少不同的值 (20 分)
JavaScript解决录入成绩并输出最高分和最低分问题
JavaScript解决录入成绩并输出最高分和最低分问题
105 0
|
12月前
|
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
142 0
某学科成绩的录入并显示出最高分,最低分,平均值。
某学科成绩的录入并显示出最高分,最低分,平均值。
OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理
OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理
77 0
【解决方案 二十三】带单位的数值转大写人民币金额
【解决方案 二十三】带单位的数值转大写人民币金额
139 0
【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
如何确定两个日期之间的工作日有多少天、计算—年中每周内各日期出现次数、确定当前记录和下一条记录之间相差的天数【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。本章节的三个需求:确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数有些许难度,不过建议还是学会比较好。
【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
【每日一题Day111】LC1604警告一小时内使用相同员工卡大于等于三次的人 | 哈希表+排序
使用哈希表统计每位员工使用工卡的所有时间节点,将时间转化为分钟的形式,方便后续统计一小时内使用次数大于等于3的员工
86 0
【C#每日一题】输入任意一个日期显示出它是当年的第几天?星期几?并打印出当月的日历
作业1:输入任意一个日期显示出它是当年的第几天?星期几?并打印出当月的日历 运行结果: 上代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { .
195 0
【C#每日一题】输入任意一个日期显示出它是当年的第几天?星期几?并打印出当月的日历
【刷题记录】40. 组合总和 II
【刷题记录】40. 组合总和 II
172 0
【刷题记录】40. 组合总和 II