sqldistinctinto
㈠ 批量删除数据库表中重复数据,但是最后要留重复数据中的一条,sql语句怎么写(select distinct * into 新
请问,你是不是只要保留表中重复数据的其中一条就可以了?
如果是的话,可以参考一下:
select 主键字段,
count(*)
from tablename
group by 主键字段
having count(*)>1;
㈡ SQL里面如何删除重复的记录
deletefromTABLE_namet1
wheret1.rowid>
(selectmin(rowid)fromTABLE_namet2
wheret1.name=t2.name
groupbyname
havingcount(name)>1)
还可以新建一张中间表,将distinct记录选出来
selectdistinct*intotemptablefromTABLE_name
deletefromTABLE_name
insertintoTABLE_nameselect*fromtemptable
㈢ SQL查询中如何剔除重复
1,存在两条完全相同的纪录
这是最简单的一种情况,用关键字distinct就可以去掉
example: select distinct * from table(表名) where (条件)
2,存在部分字段相同的纪录(有主键id即唯一键)
如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组
example:
select * from table where id in (select max(id) from table group by [去除重复的字段名列表,....])
3,没有唯一键ID
example:
select identity(int1,1) as id,* into newtable(临时表) from table
select * from newtable where id in (select max(id) from newtable group by [去除重复的字段名列表,....])
drop table newtable
(3)sqldistinctinto扩展阅读
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
㈣ sql distinct的用法
先mark,再想解决方案
先上代码,针对SQLSERVER
--inserttestdata
TRUNCATEtabletable1;
INSERTINTOTable1VALUES('ls',9,'2013-08-07')
INSERTINTOTable1VALUES('zs',2,'2013-08-09')
INSERTINTOTable1VALUES('ls',7,'2013-08-08')
INSERTINTOTable1VALUES('zs',3,'2013-08-10')
INSERTINTOTable1VALUES('ls',8,'2013-08-06')
select*from(
selectROW_NUMBER()over(
PARTITIONBYNameorderby[Date]desc
)asrn,*
fromTable1
)a
wherern=1
再上结果
rn ID Name Num Date
-------------------- ----------- ---------- ----------- ----------
1 3 ls 7 2013-08-08
1 4 zs 3 2013-08-10
思路是按名称分组,每组按日期倒序并将每个组添加行号,最后取出行号为1的记录即可
㈤ SQL重复数据的筛选
你要看你有哪些数据段是相同的,就根据那些相同的数据段分类。
比如说,
A B C D
1 1 1 3
1 1 1 4
1 1 1 5
(前面的insert 我就不写了)
那就是select A,B,C,MAX(D) FROM TABLE GROUP BY A,B,C
如果是
A B C D
1 1 1 2
2 1 1 3
3 1 1 4
就是说,如果你还有一个字段是id,主键的话就是
select A,B,C,MAX(D) FROM TABLE GROUP BY B,C
㈥ SQL里如何删除重复的字符串
deletefromTABLE_namet1wheret1.rowid>(selectmin(rowid)fromTABLE_namet2wheret1.name=t2.namegroupbynamehavingcount(name)>1)
--还可以新建一张中间表,将distinct记录选出来
selectdistinct*intotemptablefromTABLE_name
deletefromTABLE_name
insertintoTABLE_nameselect*fromtemptable
㈦ sql语句 distinct 查询疑问
select * from 新闻表 group by classid having id=max(id)
id是新闻表(不是分类表)的自动编号,classid是分类id,对应新闻分类表的id字段。
㈧ SQL2000用语句怎么删除一列里面相同的数据
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
㈨ SQL如何去重
1、首先创建一个临时表,用于演示sqlserver语法中的去重关键字distinct的使用。本文以sqlserver数据库为例演示,
IF OBJECT_ID('tempdb..#tmp1') IS NOT NULL DROP TABLE #tmp1;
CREATE TABLE #tmp1(
Col1 varchar(50),
Col2 int
);
㈩ 关于MS SQL中distinct
select DISTINCT ([id])
so2 ,
nox
from cems_control.dbo.soot1_sort
就是要求 id, so2 nox 三个都不重复的。
尽管看上去。好像你在 id 那里,加了个 括号。
没用的。
举个例子吧
比如有下面的数据:
id so2 nox
1 1 1
1 2 3
你想 只对 id 这个字段 distinct。 那么 so2 与 nox 有2条记录, 要哪一条呢?
一种做法是 使用 Group By
SELECT
id, MAX(so2), MAX(nox)
FROM
cems_control.dbo.soot1_sort
GROUP BY
id
这样 确保 id 是唯一的了。
缺点就是,可能会破坏了行的完整性。
比如
id so2 nox
1 数学 100
1 物理 85
Group By 之后的结果,就是
id so2 nox
1 物理 100