请各位大侠帮忙了
问题1:对于以下几个记录
ID
123456
123123
123456
123456
123789
所有执行完SQL后的结果顺序与原ID顺序相同,另外由于涉及到数十万条记录的操作,要求速度要快
要求结果1:去除重复ID,显示记录结果为
123456
123123
123789
要求结果2:去掉重复ID,显示结果为
123123
123789 (与结果1不同的是将所有123456都去除了,而结果1进行了保存)
要求3:根据阈值的不同,决定是否进行重复过滤,例如阈值设置为2,由于123456的重复个数为3,那么由于3》2
结果为
123123
123789
如果阈值为4,由于3《4
结果为
123456
123123
123456
123456
123789
要求结果4:上面提到的过滤均是整个字段的过滤,如果有如下新的需求,只针对字段的前三位进行过滤,上面字段的前三位均是123,那么过滤结果是这6个字符串都是相同的(因为只取前三位作为比较依据),最终输出结果就是这六个字符串,
而如果选择前四位进行过滤,上面字段中有三个是相同的,1234开头的,最终输出结果就是这三个字符串
要求结果1:
如果只取ID列 select distinct ID from table1
如果还有其他列,在id相同情况下,取col1最小的记录。
select ID,col1 from table1 t1 where not exists(select * from table1 where ID=t1.ID and col1>t1.col1)
要求结果2:
select ID from table1 t1 where not exists (select * from table1 where ID=t1.ID)
select ID from table1 t1 where (select count(*) from table1 where ID=t1.ID)=1
要求3:例如阈值设置为2
select ID from table1 t1 where (select count(*) from table1 where ID=t1.ID)<=2
要求结果4:选择前四位进行过滤
select distinct ID=left(ID,4) from table1
只要把前面语句中的ID换成left(ID,4)就可以了。
分享到:
相关推荐
SQL重复记录查询与删除 过滤重复字记录,单字段重复,重复的只显示1条记录,并且显示出所有字段 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 只能显示哪些记录是重复的。 2、删除表中...
注:此处“重复”非完全重复,意为某字段数据重复 HZT表结构 ID ... 过滤重复记录(只显示一条) Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title) 注:此处显示ID最大一条记录 二. 删除重复记录
select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。 select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录 所以用distinct达...
摘要:C#源码,数据库应用,过滤重复数据 C#查询时不显示重复数据,过滤重复内容,示例采用SQLsERVER数据库,测试前请附加数据库。
摘要:VB源码,数据库应用,过滤重复记录 VB与Access配合过滤重复记录,在查询时不显示重复的记录,这样数据量多精确,程序以ACCess数据库为例进行演示,当然,了解了原理,其实很容易就会明白采用其它数据库时的实现...
Oracle Sql性能优化 解宝喆 1、选择最有效率的表名...最高效的删除重复记录方法 ( 因为使用了ROWID)例子: DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO); ....
在不需要考虑重复记录合并时候用Union All来代替Union 使用显性游标而不使用隐性游标,特别是大数据量情况下隐性游标对性能影响很大 是否使用函数的问题 用直接的表关联来代替Exist.用Exist或Not Exists来...
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
4.5 抑制数据重复 4.6 计算字段 4.6.1 常量字段 4.6.2 字段间的计算 4.6.3 数据处理函数 4.6.4 字符串的拼接 4.6.5 计算字段的其他用途 4.7 不从实体表中取的数据 4.8 联合结果集 4.8.1 简单的...
数据如下: 303 标准类别 TR_STANDARD_MANAGER 107 巡视记录类别 TR_PATROL_LOG 61 巡视记录类别 TR_PATROL_LOG 221 检修类型 TR_REPAIR_LOG 121 检修管理计划类别 TR_REPAIR_PLAN 141 检修管理计划类别...
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM...(8) 删除重复记录:
SQL在运行时先取出数个查询的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。 实际大部分应用中是不会产生重复的记录,推荐采用UNION ALL操作符...
最高效的删除重复记录方法 ( 因为使用了ROWID)例子: DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO); (9) 用TRUNCATE替代DELETE: 当删除表中的记录时,在...
4.5 抑制数据重复 4.6 计算字段 4.6.1 常量字段 4.6.2 字段间的计算 4.6.3 数据处理函数 4.6.4 字符串的拼接 4.6.5 计算字段的其他用途 4.7 不从实体表中取的数据 4.8 联合结果集 4.8.1 简单的...
distinct这个关键字用来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说...
DISTINCT:过滤重复 把重复的行过滤掉;多个字段组合时,只排除组合重复的。 DISTINCT必须使用列名,不能使用计算或者表达式。 所有的聚合函数都可以使用。如果指定列名,则DISTINCT只能用于COUNT(列名),...
1.用EXISTS代替DISTINCT,消除sort operation 2.如果在GROUP BY中过滤数据,在WHERE从句中指定条件比在HAVING从句中有更好的...因此如果应用能够处理重复,或者确信没有重复记录,那么考虑使用UNION ALL代替UNION
Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些能够过滤掉最大数量记录的条件必须写在WHERE子句的末尾。 (3)SELECT子句中避免使用‘*’: Oracle在解析...
实例319 列出数据中的重复记录和记录条数 465 10.8 在查询中使用OR和AND运算符 466 实例320 利用OR运算符进行查询 466 实例321 利用AND运算符进行查询 467 实例322 同时利用OR、AND运算符...
--distinct 过滤重复 select distinct sex from student; --count 统计 select count(*) from student; select count(sex) from student; select count(distinct sex) from student; --top 取前N条记录 select ...