当前位置: 首页 > news >正文

计算递归关系下的合计~极简方法

某数据库有票据表和工时表,票据表存储了每张票据和父票据的关系,形成了自关联结构:

ticketidparentID
16
27
38
49
510
618
719
820
921
1022
1123
1218
1319
1420
1521
1622
1723
1824
1925
2026
2127
2228
2329
2430
2530
2630
2730
2830
2930
300
300

工时表存储了每张票据对应的直接工时:

ticketidhours
04
13
26
39
411
55
610
79
811
97
1013
112
1210
134
149
1514
168
178
187
199
209
218
2212
2314
2413
259
2612
275
2810
295
300

现在要递归地计算出每张票据的直接工时和所有下级子票据的工时之和,即总工时。

ticketidTotal_hours
13
26
39
411
55
613
715
820
918
1018
112
1210
134
149
1514
168
178
1830
1928
2038
2140
2238
2324
2443
2537
2650
2745
2848
2929
30252

SQL不支持引用,不方便表达自关联关系,缺乏递归函数,代码很难写。SPL 提供了引用函数,可以建立自关联;提供了递归函数,可以取所有下级节点:Try DEMO

 A
1$select t.ticketid ticketid,t.parentID parentID,h.hours hours from tickets.txt t left join hours.txt h on t.ticketid=h.ticketid
2>A1.switch(parentID,A1:ticketid)
3=A1.new(ticketid,A1.nodes(parentID,~).sum(hours)+hours:Total_hours)

A1:关联两个表,加载数据。

A2:用 switch 函数将父票据的字段值修改为父票据的记录引用,建立自关联关系。记录引用可以直观表达父子关系,下图是 3 号票据所有级别的父票据,[8,20,26,30]。

Picture1png


A3=A1.new(A1.nodes(parentID,~))。新建二维表,先计算出当前记录的所有下级记录。函数 nodes 可以递归地计算出某条记录所有的下级记录,~ 表示当前记录。下图是第 26 号票据的所有下级记录,[3,8,14,20]:

Picture2png


A3=A1.new(ticketid,A1.nodes(parentID,~).sum(hours)+hours:Total_hours)。再计算当前票据的总工时,也就是下级子票据的工时之和 + 直接工时。

Picture3png

esProc是开源免费的,点击下载~ 

http://www.xdnf.cn/news/236953.html

相关文章:

  • 用-智-多多-拼-好文的故事-2025
  • Windows编译及使用fdk-aac编码器
  • 力扣hot100——98.验证二叉搜索树
  • 论MMUSMMUIOMMU
  • 分支限界法:用“快递分拣”思维解决复杂问题的算法艺术
  • 数据清洗的定义跟实际操作
  • 文件读取操作
  • Java 事务详解
  • allegro 怎样显示/隐藏铜皮shape?
  • AI时代生产工厂制造业数字化转型培训师培训讲师唐兴通教授专家顾问清华大学讲授AI库存降本增效智能制造供应链生产调度智能管理设备健康
  • Python math 库教学指南
  • Kubernetes 核心组件架构详解
  • git中reset和checkout的用法
  • C语言实现库函数strlen
  • 健康养生:构建健康生活的多维度指南
  • curl和wget的使用介绍
  • 修改apk包名
  • 使用atomic实现无锁方式的全局变量访问
  • 美林数据基于大模型的设备智能运维检修方案—驱动设备运检业务效率跃迁
  • 基于SpringBoot的旅游网站的设计与实现
  • spring boot中@Validated
  • pytorch对应gpu版本是否可用判断逻辑
  • JWT GenTokenParseToken
  • AnimateCC教学:形状补间动画的代码实现
  • 零改造实现MySQL加密:安当TDE透明加密与KSP密钥管理系统的创新实践
  • Kaggle比赛入门攻略(以 Titanic 为例)
  • 玩转MCP
  • C# dataGridView分页
  • JMeter WebSocket 压测详细步骤(支持 ws+proto 协议)
  • flutter 专题 五十六 Google 2020开发者大会Flutter专题