两个字段都相同的记录如何去重

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个字段都相同的记录如何去重相关的知识,希望对你有一定的参考价值。

例如一个表有3个字段a,b,c 查询a,b的值where “c”>3 并且把查询到的数据中a,和b字段都相同的记录去重,distinct只能有一个参数 怎么破呀

distinct可以剔重,语句如下:
select distinct a,b from table where c>3;
剔重也可以用row_number() over函数,语句如下:
select * from (
select a,b, row_number() over(partition by a,b order by c) rn
from table
where c>3 ) ac
where ac.rn=1;
参考技术A 非常简单,给你个例子

查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
参考技术B oracle
select distinct a, b from T where t.c>3

数据库信息去重查询

对于与编程来说是对数据做出各种各样的处理,而一般来说,数据的最终保存地就是数据库,数据库的的sql操作就显得很是重要。如果某数据库中一张表保存有大量的数据,二这张表的某些数据是相同的,那么如何依据这个相同的字段值而查询出与这个字段相关的记录的最后一条或者是第一条数据呢?

首先,就单纯地以实验的角度来说,首先需要创建一张表,然后填充少量的数据,其中一个或某些字段的值是相同的,这个时候可能就需要复制、插入这样的sql操作语句了:

创建一张表message,然后填充几条基础数据,然后条件复制数据写入同一张表:

INSERT INTO aaa(account,content,TIME) SELECT account,content,TIME FROM aaa WHERE id=1;

技术分享

注:记得修改time字段的值,因为本实例是依据时间来取值的,也可以根据自己的需要自行设置取值条件。

 

第二步,现在开始取值。

比如说,我要获得每个account的最后一条交流记录:SELECT * FROM message WHERE TIME IN(SELECT MAX(TIME) FROM message GROUP BY account)。

技术分享

 注:也可以只取第一条数据,只需修改一下子查询的max()函数为min()就可以了。

以上是关于两个字段都相同的记录如何去重的主要内容,如果未能解决你的问题,请参考以下文章

用distinct 怎样根据两个字段找唯一条纪录

在SQL中怎么删除两个表中相同的数据

如何判断数据库中的两个表是否相同(相等)?比较数据库中的两个表是否完全相同,包括字段和每条记录

SQL查询结果一字段相同合并,另一字段为数字和逗号合并并去重

SQL中如何将两个相同的表格组合成一个表格

如何根据字段合并两个 CSV 文件并在每条记录上保持相同数量的属性?