多层固定分组计算
创始人
2024-01-31 00:39:53
0

【问题】

I want to build opening closing report –

ITEM_TRANSACTION TABLE-
Consider below data–
1.When item is prepared entry is made into table wih NULL indicator..
2. When Item is issued/sold entry is made into table with ISSUE indicator

Date Iname Iquantity Indicator
1-Apr-14 Item1 15
2-Apr-14 Item1 10 ISSUE
2-Apr-14 Item1 3
3-Apr-14 Item1 5 ISSUE

I want to generate opening closing report (where closing quantity for today will be opening for 2mrw)

Date Iname Opening_Qty Today manufactured Total_balance Issued Closing
1-Apr-14 Item1 0 15 15 0 15
2-Apr-14 Item1 15 3 18 10 8
3-Apr-14 Item1 8 0 8 5 3

【回答】

提问者有商品操作记录表,按入库和消费的动作记录日期、商品名、操作数量和操作方向。如下表,indicator 代表的就是操作方向,值为空代表入库,值为’issue’代表消费。

需求是将入库出库的数量进行计算,获取每个操作日期,每个商品的起始数量、入库数量、入库后的数量、消费数量和结束数量。这种多层固定分组算法,需要源数据要按照固定的日期(第一层),以及固定的产品(第二层)进行对齐。用 SQL 实现此算法要使用嵌套查询或结构复杂的 join 语句,再加上涉及分组汇总和行间计算,又要用到窗口函数,这就使代码更加难写。

使用 SPL 可以这样去实现

A
1=connect(“test”)
2=A1.query(“select _DATE, _NAME,sum(CASE _INDICATOR WHEN ‘ISSUE’ THEN 0 ELSE _QUANTITY END) TodayManufactured,sum(CASE _INDICATOR WHEN ‘ISSUE’ THEN _QUANTITY ELSE 0 END) Issued from ITEM_TRANSACTION group by _DATE, _NAME order by _NAME, _DATE”)
3=A2.group(_NAME)
4=A3.conj((c=0,~.derive(c:Opening_Qty,(b=c+TodayManufactured):Balance,(c=b-Issued):Closing)))

A1: 连接 test 数据库。

A2:查原始 ITEM_TRANSACTION 表,按日期和品名分组,将某日某商品的出入情况转成数值。先按品名再按日期对结果排序。

A3:A2 按照品名分组,group 函数可以做到只分组,不聚合,这一点也优于 sql,方便了接下来对每条记录逐一计算。

A4: 分别计算 A3 中每个商品组,自己各个日期中商品数量的变化。这里用到了一个临时变量 c,方便记录商品数量变化值,并传递给下一条记录。为序表增加需求的几个列,同时计算其值。

这样,我们在每个商品的序表中增加了需求的字段,完成了这些字段值的计算,最终将多个商品的结果合并在一起。

最终我们可以在 A4 格看到要求的结果。

原表:

A2

A3

成员 1 是 item1 组,成员 2 是 item2 组

A4

相关内容

热门资讯

【中国那些事儿】外媒:便利化政...   中国日报网12月18日电 国际旅游媒体《旅行与旅游世界》(Travel and Tour wor...
大看台丨撬动万亿,冰雪经济何以...   新华社北京12月18日电(记者高萌、李春宇、杨帆)近日召开的中央经济工作会议将“坚持内需主导,建...
【世界说】日本防卫费“野蛮生长...   中国日报网12月19日电 近期,日本高市早苗政府一系列激进防卫政策调整引发国际社会广泛担忧与批评...
脱贫村的这五年|从“门票经济”...   一说起西藏自治区,人们往往会想到雪山巍峨、朔风凛冽,很难将其与娇柔的桃花联系在一起。但是在林芝市...
新华时评|海南自贸港封关开启中...   新华社海口12月18日电 题:海南自贸港封关开启中国对外开放新篇章  新华社记者王晖余、吴茂辉 ...
我国加速布局未来产业抢占发展先...   “十五五”规划建议提出,要前瞻布局量子科技、生物制造、氢能和核聚变能等六大未来产业。今年以来,国...
突发!台北地铁发生砍人事件已致...   据界面新闻报道,今日(12月19日)17时30分左右,台北捷运地铁有一名头戴“专业级防毒面具”的...
春华章•青春问答 | 87岁影...   从话剧舞台到影视镜头,她对每个角色倾尽心力。熟读全剧、揣摩细节、为角色学技能,坚信 “每个角色都...
世界首个原生电力专业大模型正式...   为新型电力系统装上“智慧大脑” 首个原生电力专业大模型正式发布  12月19日,世界首个原生电力...
油价即将调整,12月油价或“二...   2025年12月18日,国内成品油计价周期进入第8个统计日,10个工作日的调价周期已完成80%,...