mysql 根据两个字段值查询时如何去除重复数据

Posted

tags:

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

表结构 & 数据

id date name code

1 2015-1-1 张三 1111
2 2015-2-1 李四 2222
3 2015-3-1 张三 1111
4 2015-4-1 王五 3333
5 2015-5-1 赵六 4444

根据字段name和code的值 如果两个值都相同的数据 就按date最大的保留

例如
id为1和3的 name和code都一样 就保留date最大即Id为3的这条数据

求大神指导sql怎么写

假设表名为test:

select * from (select *, concat(name,code) as __f from test order by date desc) __t group by __f;
参考技术A 删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleName in (select peopleName from people group by peopleName having count(peopleName) > 1)
and peopleId not in (select min(peopleId) from people group by peopleName having count(peopleName)>1)
看看这里:http://blog.csdn.net/anya/article/details/6407280
参考技术B select distinct a.* from 表 a where a.date = ( select max(b.date) from 表 b where b.name = a.name and b.code = a.code )
自己试试
参考技术C 这个语句是查询`Index`,sequence都相同的数据
select * from (select *, concat(`Index`,sequence) as __f from tbl_item order by sequence desc) __t group by __f having count(__f)>=2;
select * from tbl_item where sequence = 1465399887
参考技术D select distinct id,date ,name,code from 表名 where 条件
在select 后加上一个distinct ,注意 distinct后面的字段不能是重复项的 比如id就可以 name code 就不行了

Mysql去除中文字符&判断字段是不是有中文字符

参考技术A

背景:用户表中的name存的是用户名字的拼音和中文。
需求:名字去除掉所有的中文字符。

解决方案:
通过CONVERT(name USING ASCII)把中文转换为?,然后再进行替换。

引申问题:怎么判断字段包含中文字符
方法1:查询CONVERT(name USING ASCII)转换为后有?的数据。

方法2:通过正则表达式查询,\'[^ -~]\'或\'e[4-9][0-9a-f]4\'或者\'^(..)*(E[4-9])\'表示含中文。

方法3:通过length()和char_length()返回值不同进行查询。

参考链接:
( https://blog.csdn.net/u012731379/article/details/64125572 )

以上是关于mysql 根据两个字段值查询时如何去除重复数据的主要内容,如果未能解决你的问题,请参考以下文章

sql查询中如何去除某个字段重复的数据

mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留

mysql 查询怎么去除重复列

oracle 查询两个字段的值重复的记录

sql语句去重

用distinct查询筛选去除数据库两个字段重复的值,不成功,还是你把重复的值显示出来了,应该怎么处理呢?