快速数据处理:根据多字段查找重复记录及删除多余记录

本文主要是介绍快速数据处理:根据多字段查找重复记录及删除多余记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

为什么要处理重复记录

1 查询重复记录

2 查询重复记录使用的控件及代码

3 删除重复记录

4 导出数据


为什么要处理重复记录

如果一个数据集中含有重复记录,可能需要仅仅保留一条记录,清理掉多余的记录。重复记录的定义,可能仅根据一个字段值确定,也可能需要根据多个字段值确定。

这里演示以下功能:

  • 根据数据集的任意多个字段确定重复记录;
  • 导出查询结果;
  • 对于重复记录,仅保留一条,删掉多余的;

1 查询重复记录

此处需要自定义查询字段。

可以看到,使用的查询语句是:

select a.k_hzcs as 货主城市,a.l_hzdq as 货主地区,a.计数 from(select k_hzcs,l_hzdq,count(l_hzdq) as 计数 from dd group by k_hzcs,l_hzdq having 计数>1) a

这里同时完成了字段名称由英文向中文的转换,便于浏览数据。

2 查询重复记录使用的控件及代码

为了便于导出数据,显示查询结果数据这里使用了 TsWorksheetGrid 控件。

// 查询重复按钮查看重复记录情况
procedure TFormSelectFields.btnQueryClick(Sender: TObject);
varsql, sql1, sql1_groupby, sFieldEn, sFieldCn: string;i,iRow, iCol: integer;iResColCnt: integer;MyCell: PCell;
beginwsGrid.Clear;list_fields_en_duplicate.Clear;list_fields_cn_duplicate.Clear;// 选中的中文字段和英文字段列表for i := 0 to clbFieldsCn.Count - 1 dobeginif clbFieldsCn.Checked[i] thenbeginlist_fields_cn_duplicate.Append(clbFieldsCn.Items.Strings[i]);list_fields_en_duplicate.Append(lbFieldsEn.Items.Strings[i]);end;end;sql := 'select';sql1 := 'select';sql1_groupby := '';for i := 0 to list_fields_en_duplicate.Count - 1 dobeginsFieldEn := list_fields_en_duplicate.Strings[i]; // 英文字段名sFieldCn := list_fields_Cn_duplicate.Strings[i]; // 中文字段名if i = 0 thenbeginsql := sql + ' a.' + sFieldEn + ' as ' + sFieldCn;sql1 := sql1 + ' ' + sFieldEn;sql1_groupby := sFieldEn;endelsebeginsql := sql + ',a.' + sFieldEn + ' as ' + sFieldCn;sql1 := sql1 + ',' + sFieldEn;sql1_groupby := sql1_groupby + ',' + sFieldEn;end;end;sql := sql + ',a.计数 from(';sql1 := sql1 + ',count(' + sFieldEn + ') as 计数 from ' + tableEn_crud_master + ' group by ' + sql1_groupby + ' having 计数>1) a';sql := sql + sql1;memo1.append('重码sql: ' + sql);queryTmp.Close;queryTmp.SQL.Text := sql;queryTmp.Open;// 显示列名称for iResColCnt := 0 to queryTmp.FieldCount - 1 dobeginwsGrid.Worksheet.WriteText(0, iResColCnt, queryTmp.Fields[iResColCnt].FieldName);MyCell := wsGrid.Worksheet.GetCell(0, iResColCnt);MyCell^.Border := [cbNorth, cbWest, cbEast, cbSouth];MyCell^.BackgroundColor := $00FD9346;MyCell^.HorAlignment := haCenter;end;iRow := 1;queryTmp.First;while not queryTmp.EOF dobegin//wsGrid.Worksheet.WriteText(iRow, 0, sTableCn);MyCell := wsGrid.Worksheet.GetCell(iRow, 0);MyCell^.Border := [cbNorth, cbWest, cbEast, cbSouth];//wsGrid.Worksheet.WriteText(iRow, 1, sCheckTitle);MyCell := wsGrid.Worksheet.GetCell(iRow, 1);MyCell^.Border := [cbNorth, cbWest, cbEast, cbSouth];for iResColCnt := 0 to queryTmp.FieldCount - 1 dobeginwsGrid.Worksheet.WriteText(iRow, iResColCnt, queryTmp.Fields[iResColCnt].AsString);MyCell := wsGrid.Worksheet.GetCell(iRow, iResColCnt);MyCell^.Border := [cbNorth, cbWest, cbEast, cbSouth];end;iRow += 1;queryTmp.Next;end;// 调整列宽for iCol := 0 to wsGrid.Worksheet.GetLastColIndex(false) dowsGrid.ColWidths[iCol + 1] := 200;end;

3 删除重复记录

这里删除多余重复记录使用的sql语句是:

delete from dd where rowid not in(select MIN(rowid) from dd group by k_hzcs,l_hzdq)

到主页面刷新一下记录数,从830变为24。

4 导出数据

导出数据极简单。

// 导出
procedure TFormSelectFields.Button1Click(Sender: TObject);
varfn: string;
beginSaveDialog1.Filter := 'Excel文件|*.xlsx';if SaveDialog1.Execute thenbeginfn := SaveDialog1.FileName;wsGrid.Workbook.WriteToFile(fn, sfOOXML, true);end;memo1.append('保存完成: ' + fn);end; 

这篇关于快速数据处理:根据多字段查找重复记录及删除多余记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201603

相关文章

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/mysql/data目录下的数据迁移到/data/local/mysql/mysqlData。 原因是系统盘太小,只有20G,几下就快满了。 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本。 步骤如下: 1) 先修改好/etc/my.cnf,        ##[mysqld]       ##datadir=/data/loc

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件?是否可以恢复永久删除的文件?或者最糟糕的是,如果文件直接被删除怎么办?本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件? “回收站清空后我还能恢复已删除的文件吗?” 答案是肯定的,但是在这种情况下您将需要一个  回收站恢复工具 来从回收站中检索文件: 错误/永久删除回收站或任何数字存储设备中的文件 直接删除的文件/