sql 如何过滤重复记录

请各位大侠帮忙了
问题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)