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

怎样快速将分组内的字段值按次序复制到其它分组

某库表前两个字段都是分组字段,后两个字段是组内明细。按前 3 个字段排序后,数据有以下规律:同一个大组的各小组的记录数一定相同;每个大组里只有最后一个小组的第 4 个字段有值,其他小组都是 null。

Group1Group2LineIDTargetField
115
116
123
124
1311
1322
2411
2412
259
2510
2673
2684

现在要在每个大组内,把最后一个小组的第 4 列,按序列的顺序更新或复制到其他小组。

Group1Group2LineIDTargetField
1151
1162
1231
1242
1311
1322
24113
24124
2593
25104
2673
2684

SQL 分组后必须立刻汇总,缺乏天然序号,只能间接实现分组后的有序计算,代码很复杂。SPL 可以保持分组子集,提供了天然序号,方便进行分组后的有序计算::Try DEMO

 A
1$select * from lines.txt order by Group1, Group2, LineID
2=A1.group(Group1).(~.group(Group2))
3=A2.(last=~.m(-1).(TargetField),~.(~.(TargetField=last(#))))
4return A1

A1:加载数据,按前 3 个字段排序。

A2:用按第 1 个字段分组,组内再按第 2 个字段分小组,但不汇总,每个大组和小组都是一个集合。函数 group 用于分组,~ 表示当前组。第 1 个大组点击展开后如图:

Picture1png


A3=A2.(last=~.m(-1).(TargetField), …) 循环处理 A2 中的每个大组,先取当前大组中的最后一个小组的 TargetField 字段的序列,命名为 last。函数 m 表示按序号取成员,-1 表示倒数第 1 个。第一个大组的 last 如图:

Picture2png

A3=A2.(…, ~.(~.(TargetField=last(#)))) 再循环处理当前大组的每个小组的每条记录,将第 4 个字段改成 last 里位置相同的值。”~.(TargetField)”表示按名字取出字段序列;”last(#)”表示按序号取成员,是”last.m(#)”的简写;符号 #表示当前序号。执行后 A1 被修改成下图:

Picture3png

上面代码修改了每个大组的每个小组,实际上最后一个小组可以不改,或者说应该取第 1 到倒数第 2 个小组,代码:~.m(1:-2),简写做 ~.m(:-2)

A4:最后返回 A1。

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

相关文章:

  • 稀疏数组在组合优化中的典型应用场景
  • Axure原型中引入Echarts动态图表的实现方案(100%成功)
  • word文档基本操作: 编辑页眉页脚和插入目录
  • 网络设计之综合布线设计实验
  • Android 位掩码操作(和~和|的二进制运算)
  • 三格电子—PROFINET 到 MODBUS 协议网关应用案例
  • python打卡day19
  • Web 架构之高可用基础
  • 配置Hadoop集群环境-使用脚本命令实现集群文件同步
  • Apollo学习——创建cyber包
  • git命令积累(个人学习)
  • Navee滑板车强势登陆中国,以智能科技重塑城市出行新风尚
  • 慢慢轮动着往上涨
  • 小刚说C语言刷题—1341银行存款问题
  • LeetCode 3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述
  • Matlab 基于Hough变换的人眼虹膜定位方法
  • nginx 会话保持(cookie的配置)
  • 【计算机网络】Cookie、Session、Token之间有什么区别?
  • Linux复习笔记(二) 网络服务配置(samba /DNS)
  • Python机器学习中的字典列表特征提取
  • 苹果Safari浏览器上的搜索量首次下降
  • 外交部:解放军参加红场阅兵体现了中方对历史的尊重和铭记
  • 中邮保险斥资8.69亿元举牌东航物流,持股比例达5%
  • 美CIA发布视频“招募中国官员窃取机密”,外交部:赤裸裸的政治挑衅
  • 金沙记忆|元谋龙街渡:是起点也是终点
  • 澎湃读报丨央媒头版五四青年节集中刊文:以青春之我,赴时代之约