SQL,从每组中的 json 字段中提取唯一值

postgreySQL 库表的第 1 列是 ID,用于排序;第 2 列是分类;第 3 列类似 json(非标准 json), 并存在重复项。

|----|----------------|---------------------------------------------------------------------|
| id | component_type | component_names |
| 1 | INGESTION | {ingestiona,atul, ingestiona, ingestionb} |
| 2 | INGESTION | {test_s3_prerit, atul} |
| 3 | DQM | {testmigration} |
| 4 | SCRIPT | {scripta,scripta,scripta,testimportscript,testimportscript,b,c,c,x} |
| 5 | SCRIPT | {testimportscript, scripta,scripta,a,a,b,b,c} |
| 6 | SCRIPT | {Script_Python,scripta,x} |
| 7 | BUSINESS_RULES | {s3_testH_Graph} |
| 8 | EXPORT | {Export2} |

要求:用 Java 提取每组的唯一值,并使其位于原记录的原位置;或者说,按照原分组每条记录的顺序,自上而下依次删掉重复的项,唯一值保持原位。

|----------------|----------------------------------|
| component_type | component_names |
| INGESTION | {ingestiona,atul,ingestionb} |
| INGESTION | {test_s3_prerit} |
| DQM | {testmigration} |
| SCRIPT | {scripta,testimportscript,b,c,x} |
| SCRIPT | {a} |
| SCRIPT | {Script_Python} |
| BUSINESS_RULES | {s3_testH_Graph} |
| EXPORT | {Export2} |

编写SPL代码

|---|--------------------------------------------------------------------------------|
| | A  |
| 1 | =post1.query("select component_type,component_names from tb order by id") |
| 2 | =A1.run(#2=mid(#2,2,len(#2)-2).split@tc() ) |
| 3 | =A2.group@u(#1).(~.run( #2=(#2-1|#2).id@u() ).rvs().run(#2=#2\#21)) |
| 4 | return A1.run(#2="{"+#2.concat@c()+"}") |

A1:通过JDBC查询数据库。

A2:将每条记录的第 2 个字段拆分为多项。

A3:按第 1 列分组并保持原序,然后处理每组数据:按记录顺序累积各项,并去除重复;颠倒记录顺序;用本记录的累积结果和下条记录的累积结果求差集。

A4:恢复原字符串格式,并返回结果。

Java 集成 SPL 可参考 Java 如何调用 SPL 脚本

SPL开源地址

相关推荐
名字还没想好☜2 小时前
Go 结构体内存对齐:调整字段顺序,同样的字段省下 40% 内存
开发语言·后端·golang·go·内存对齐
玛丽莲茼蒿2 小时前
很难出错的Spring5(十)—— IOC进阶
java·开发语言·jvm
Ulyanov2 小时前
雷达导引头仿真中的坐标系——从惯性系到量测角
开发语言·python·算法·系统仿真·雷达信号处理·雷达导引头
减瓦2 小时前
Jackson 使用指南
java·spring boot·json
whn19772 小时前
oracle的节点2无法启动asm实例 提示PMON terminating the instance due to error 481
数据库·oracle·wpf
前鼻音太阳熊3 小时前
【MES系统】- 工业HMI状态机可视化实践:从手写SVG到Cytoscape.js的技术选型与踩坑
开发语言·javascript·ecmascript
AAA@峥3 小时前
Ceph 集群配置管理完整指南
运维·数据库·分布式·ceph
旺仔学长 哈哈3 小时前
基于SpringBoot的在线招聘测评系统的设计与实现----附源码35253+数据库文档
数据库·spring boot·后端·在线招聘
阿米亚波3 小时前
【C++ STL】std::array
java·开发语言·c++
wuyk5553 小时前
66.嵌入式C语言进阶:共用体(Union)实战指南——单片机内存省一半的神级技巧
c语言·开发语言·stm32·单片机·嵌入式硬件