SQL:多字段混合去重后编号

news/2024/11/29 18:04:42/

SQL SERVER 库表存储人员记录,来自多种源数据,如果两条记录的 Name、Phone、Email 字段之一有重复,则说明这两条记录是同一个人。null 是数据未知,两条记录的字段都为 null 时表示两者默认不重复,是否重复要靠其他字段判断。注意,如果 A 和 B 重复,B 和 C 重复,则 A 和 C 也是重复的。

RegisterIdNamePhoneEmail
XXX-00001John Strauss241567Null
XXX-00023Rick Astley241567richardastley@gmail.com
XXX-00003John StraussNULLNULL
XXX-00099NULL241567georgeharrison@gmail.com
XXX-00085NULL256819richardastley@gmail.com
XXX-00016NULLNULLgeorgeharrison@gmail.com
XXX-00007John Deep280933NULL
XXX-00008John Deep93484NULL
XXX-00009Javier Estrada94578javier@gmail.com
XXX-00010NULL3993939939@gmail.com

要求:新增计算列人员编号 no,找到重复的记录,给每组重复的记录赋予一个独立的 no。

RegisterIdNamePhoneEmailno
XXX-00001John Strauss2415671
XXX-00023Rick Astley241567richardastley@gmail.com1
XXX-00003John Strauss1
XXX-00099241567georgeharrison@gmail.com1
XXX-00085256819richardastley@gmail.com1
XXX-00016georgeharrison@gmail.com1
XXX-00007John Deep2809337
XXX-00008John Deep934847
XXX-00009Javier Estrada94578javier@gmail.com9
XXX-000103993939939@gmail.com10

编写SPL代码

1=mssql.query("select * from tb")
2=T=A1.derive(#:no)
3

for T.count(T[1:].count( if(no!=T.no && (

(Name && T.Name && Name==T.Name) ||

(Phone && T.Phone && Phone==T.Phone) ||

(Email && T.Email && Email==T.Email)),

T.no=no=min(no,T.no) ))>0)>0

4return T

A1: 通过JDBC查询数据库。

A2:新增编号列no,缺省为记录序号#。

A3:用死循环遍历记录调整no列,如果某次遍历后有no被调整的情况,则重新遍历,直到所有no都不再调整为止。遍历记录时从上往下进行,当前是第i条记录时,把它依次与第i+1直至最后一条记录比较,如果被认为是重复记录则同步两者的no,取两者间较小的那个。字段值为null时,默认与其他记录不重复。注意null与任何值进行逻辑与运算时,都为false。

count函数返回符合条件的成员的个数,当第i条记录与i+1直至最后一条记录比较的过程中,如果有发生no被调整的动作,则内层的count将大于0,这会导致外层的count也大于0,满足继续循环的条件。

还需要有no!=T.no的条件,确保调整动作中至少有一个no值会变得更小,否则可能出现无法结束的死循环。

免费下载试用


http://www.ppmy.cn/news/1550956.html

相关文章

React Router v7正式发布:开启全栈框架新时代

概述 2024年11月22日,React Router团队宣布React Router v7正式发布。这一重大版本不仅将Remix的大量特性整合到了React Router中,还为React Router用户开启了全新的“框架模式”,使得开发者可以直接使用Remix的功能。这标志着React Router从…

设计有一个 “分布式软总线“ 系统,跨平台

设计一个 跨平台的分布式软总线 系统是为了实现不同设备间的通信,支持各种硬件平台和操作系统,且能够通过统一的协议进行互联互通。这样的系统通常用于物联网(IoT)场景、智能家居、智能制造、车联网等应用。以下是一个详细的设计方…

Spring Cloud Stream实现数据流处理

1.什么是Spring Cloud Stream? Spring Cloud Stream的核心是Stream,准确来讲Spring Cloud Stream提供了一整套数据流走向(流向)的API, 它的最终目的是使我们不关心数据的流入和写出,而只关心对数据的业务处…

Linux快速入门:3.硬盘分区与RHEL8系统安装

点击蓝字 | 关注我们 规划Linux的硬盘分区 在安装RHEL8前,我们先根据上节的内容Linux快速入门:2.Linux的文件系统和目录结构,对硬盘进行分区规划。 对于Linux初学者,在学习过程中建议分区方案越简单越好,只需要将硬盘分…

Vim操作指南

Vim 是一款功能强大的文本编辑器,它广泛应用于程序员、系统管理员和普通用户的日常工作中。Vim 以其高效、灵活和可扩展性著称,虽然上手有一定难度,但掌握后可以极大提高编辑效率。本指南旨在为用户提供一个详细的 Vim 操作教程,从…

人工智能技术的工程伦理问题 --以美团外卖大数据杀熟为例

引言 最近朋友圈刷屏的一篇文章《我被美团会员割了韭菜》很多人都看过,针对该事件,网经社电子商务研究中心主任曹磊指出:大数据“杀熟”暴露出大数据产业发展过程中的非对称以及不透明。由此也带来的最大伦理危机—个人隐私权问题。 背景信…

深度学习:完整的模型训练流程

深度学习:完整的模型训练流程 为了确保我们提供一个彻底和清晰的指导,让我们深入分析在model.py和train.py文件中定义的模型训练和验证流程。以下部分将详细讨论模型结构的定义、数据的加载与预处理、训练参数的配置、训练与测试循环,以及模…

如何通过PHP爬虫模拟表单提交,抓取隐藏数据

引言 在网络爬虫技术中,模拟表单提交是一项常见的任务,特别是对于需要动态请求才能获取的隐藏数据。在电商双十一、双十二等促销活动期间,商品信息的实时获取尤为重要,特别是针对不断变化的价格和库存动态。为了满足这种需求&…