多层固定分组计算

news2025/7/27 17:40:08

【问题】

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]SSM计算机毕业设计中学学生学籍管理JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

笔试强训第29天

单选 A选项:当内存访问越界的时候,线程会收到信号,进而进行信号处理。调用信号处理函数。 B选项:ACM时间。 A:最后访问时间,文件被读取而更新的时间 C:状态修改时间,文件的属性或者权…

遨博机械臂URDF功能包ROS仿真

文章目录知识目标1.机械臂URDF功能包文件结构2.URDF模型中的元素和参数3.任务描述3.1 修订launch启动文件参数3.2 URDF功能包编译知识目标 学习机械臂URDF功能包文件结构 掌握机械臂URDF模型文件各元素和参数概念 1.机械臂URDF功能包文件结构 2.URDF模型中的元素和参数 机械…

【mmDetection框架解读】入门篇三、VOC数据集转COCO数据集,在MMDetection中成功运行

目录一、voc数据集转coco数据集二、修改配置二、验证数据集是否转换成功相关源码文件一、voc数据集转coco数据集 执行命令: python tools/dataset_converters/pascal_voc.py ../../../data/devkit ../../../data/coco通过VOC的xml文件生成COCO的json标签文件。 再…

Linux下延时一定时间,又不挂起程序。

0.前言 这是一个解决篇Linux C语言怎么实现通过socket发送一秒数据,上次想要实现做一秒的事情没有写出来,这次解决掉。先推荐一部电影《猩球崛起》三部曲。 1.Linux下的sleep函数。 这个函数的确可以起到延时的作用,但是他会把整个进程挂起&a…

CentOS8替代盘点

常用的替代选项 国外替代 Rocky Linux AlmaLinux Oracle Linux UEK内核 CentOS Stream 国产替代 Anolis OS TencentOS Server(桌面版无法迁移) openEuler OpenCloudOS 宝塔面板 推荐 Rocky/Alma/Oracle linux 8 持保守态度 Centos 8 Stream Anolis(Centos 8 Stream…

L1和L2正则化的三种不同角度的理解

观看B站视频后写的笔记,链接 降低模型复杂度>正则化>减小模型参数个数 0. 前言 正则化是一个专有名词,和正则表达式中的正则没有任何关系。L1和L2正则化就是用L1范数和L2范数来规范模型参数的这么一种方法,Dropout也叫正则化&#x…

[附源码]SSM计算机毕业设计中小型便民药店管理论文JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux17 --- 消息队列

一、IPC进程间通信:消息队列 消息队列是在两个进程之间传递二进制块数据的一种简单有效的方式。每个数据块都有一个特定的类型,接收方可以根据类型来有选择地接收数据,而不一定像管道和命名管道那样必须以先进先出的方式接收数据。 Linux消…

BootStrap响应式项目实战之世界杯网页设计

BootStrap实战 目标 响应式布局复习 HTML5的复习 CSS3的复习 了解BootStrap 一.复习 响应式布局:页面可以随着设备的变化而动态改变。 ​ 淘宝:pc端一套页面:不能随着屏幕的缩小而变化; ​ 移动端:另外一套页面&am…

Java中的::

今天在练习SpringBoot的时候,看到了以下这种写法: //实体类: Data public class Book {private Integer id;private String type;private String name;private String description; }//测试类 //实现功能:关键字查询 Test void t…

PCB设计---深入浅出的反弹图

作者:一博科技高速先生成员 孙小兵 众所周知,信号的反射与互连线的阻抗密切相关,可以说互连线中阻抗突变是产生信号反射的最直接原因。但究竟为什么会发生反射,反射对信号的影响是什么样的,信号反射的过程又是如何呢&…

MySql死锁

MySql死锁产生的原因?[面试7.0] 高并发情况下,事务之间对资源的访问顺序交替会导致死锁 加锁失败且出现环时触发死锁 事务1事务2begin;select *from testlock where id1 for update;begin;select *from testlock where id2 for update;select *from testlock where id2 for…

安卓系统的启动

Init.rc启动 创建和挂在启动所需的文件目录初始化和启动属性服务解析init.rc配置文件并启动Ztgote进程 Zygote进程 创建一个Server端的Socket预加载类和资源启动SystemServer进程等待AMS请求创建新的应用程序进程 SystemServer进程 启动Binder线程池,这样就可以…

环保数采仪 VOCs|污染源|水质污染源|烟气排放在线监测

计讯物联环保数采仪,丰富接口,符合环保行业规约标准,具备采集、无线传输、控制、告警等功能,广泛应用于Vocs在线监测、水污染大气污染远程监测、烟气排放在线监控等场景,数据全方位多角度实时采集、自动上报、远程在线…

汽车倒车防碰撞报警系统的设计

目 录 1 绪论 1 1.1 背景 1 1.2 国外研究情况 1 1.3 超声波测距的优势 2 2 基本原理 3 2.1 超声波简介 3 2.2 超声波基本特性 4 2.3 超声波模块简介 5 2.4 超声波传感器原理 6 2.5 超声波的测距原理 6 3 总体方案 8 4 硬件实现 9 4.1 电路 9 4.1.1 主控制最小系统电路 10 4.1.…

面试24K字节测试开发岗被血虐,到底具有怎样的技术才算高级水平?

前几天我朋友跟我吐苦水,这波面试又把他打击到了,做了6年软件测试。。。 下面这条招聘是在腾讯招聘官网截图下来的,首先我们对高级水平下一个定义吧,那它应该是对标这个职级该有的能力 什么样的工程师才能算高级?至少…

《数据库的原理与应用》--用两种方法实现S-T数据库创建

一、实验目的 复习数据库的定义,用两种方法实现S-T数据库创建;用两种方法创建数据库表,最后为数据库中的三个表增加数据;分离数据库和备份数据库。数据库表为: 学生表:Student(Sno,Sname,Ssex,Sage,Sdept…

Django ORM 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询

Django model ORM数据表相关操作 分析思路,创建数据表 对于表操作,表之间的关联关系,必须理解他们之间的关系,对于编程很重要。可以看看映射关系、外键和relationship查询 ,至少明白外键相关基本知识。 &#xff08…

App Languages 批量导入管理Android多语言文案

AppLanguages支持安卓的多语言文案管理啦,支持批量的检测,批量导入,批量删除,批量替换,批量导出。 操作界面 批量导入 1)需要选择res文件夹的路径,方便创建和寻找本地的多语言文件 2&#xff…