如何有条件的删除表中重复的行

zqdue 2007-11-29 10:56:12
我有一个表十多万条记录,其中大约有1万多条记录名字复重了!我本意是名字不可以重复的!
表结构如下:
名字 班级 入学日期
张三 高二 2006-01-01
李四 高三 2003-01-02
李四 高三 2006-08-02
李四 高三 2004-03-03

我现在想把这个(名字)重复记录中(入学日期)较旧的记录都删除,只保留(入学日期)较新的一条就可以了!
谢谢大家!
...全文
111 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2007-11-30
  • 打赏
  • 举报
回复
create table tb(名字 char(6),班级 char(6),入学日期 datetime)
insert into tb values( '张三','高二','2006-01-01')
insert into tb values( '李四','高三','2003-01-02')
insert into tb values( '李四','高三','2006-08-02')
insert into tb values( '李四','高三','2004-03-03')
go

delete a from tb a where 入学日期 not in (select max(入学日期) from tb where 名字 = a.名字)
select * from tb

drop table tb

/*
名字 班级 入学日期
------ ------ ------------------------------------------------------
张三 高二 2006-01-01 00:00:00.000
李四 高三 2006-08-02 00:00:00.000

(所影响的行数为 2 行)

*/
dawugui 2007-11-30
  • 打赏
  • 举报
回复
delete from tb a where 入学日期 where 入学日期 not in (select max(入学日期) from tb where 名字 = a.名字)
zhejiuzhenenbulai 2007-11-30
  • 打赏
  • 举报
回复

create table tb1130(nm char(6),cls char(6),startday datetime)
insert into tb1130 values ('张三','高二','2006-01-01')
insert into tb1130 values ('李四','高三','2003-01-02')
insert into tb1130 values ('李四','高三','2006-08-02')
insert into tb1130 values ('李四','高三','2004-03-03')

delete t1
from tb1130 t1
where
t1.startday<(select max(startday) from tb1130 where nm=t1.nm group by nm)

select * from tb1130
JL99000 2007-11-30
  • 打赏
  • 举报
回复
老乌龟:
delete a from tb a where 入学日期 not in (select max(入学日期) from tb where 名字 = a.名字)
这里的a不就是tb的别名嘛,那我不用a表示,得到的结果却只剩下一个了,也就是说他没有按名字来找到最大的时间
解释一下 谢谢~
w2jc 2007-11-30
  • 打赏
  • 举报
回复
上面高手写得代码已经很多了,
但是想好奇一下,为什么要把之前的入学记录删除?好像不利于历史数据的保存...


zqdue 2007-11-30
  • 打赏
  • 举报
回复
终于删除了一大部分重复的资料了!但还有一部分就是名字和入学日期都是原全相同的!现在又要想办法只保留其中一条记录,删掉其他重复的!
中国风 2007-11-30
  • 打赏
  • 举报
回复
startday字段存在null空值
zqdue 2007-11-30
  • 打赏
  • 举报
回复
我用11楼(这酒真嗯不赖)的方法!有以下提示呢!!!!


警告: 聚合或其它 SET 操作消除了空值。

(所影响的行数为 7604 行)
zqdue 2007-11-30
  • 打赏
  • 举报
回复
谢谢各位的帮助!
我先试试看!
成功后就结帖打分!
pt1314917 2007-11-29
  • 打赏
  • 举报
回复

create table sss(名字 char(6),班级 char(6),入学日期 datetime)
insert sss select '张三','高二','2006-01-01'
insert sss select '李四','高三','2003-01-02'
insert sss select '李四','高三','2006-08-02'
insert sss select '李四','高三','2004-03-03'



delete sss from sss b
where exists( select 1 from sss where 名字=b.名字 and 入学日期>b.入学日期)

hui_hui_2007 2007-11-29
  • 打赏
  • 举报
回复

create table t1 (
名字 varchar(10),
班级 varchar(10),
入学日期 datetime
)


insert into t1 (名字,班级,入学日期 ) values('张三','高二','2006-01-01')

insert into t1 (名字,班级,入学日期 ) values('李四','高三','2003-01-02')

insert into t1 (名字,班级,入学日期 ) values('李四','高三','2006-08-02')

insert into t1 (名字,班级,入学日期 ) values('李四','高三','2004-03-03')

select * from t1

/*
名字 班级 入学日期
---------- ---------- ------------------------------------------------------
张三 高二 2006-01-01 00:00:00.000
李四 高三 2003-01-02 00:00:00.000
李四 高三 2006-08-02 00:00:00.000
李四 高三 2004-03-03 00:00:00.000

(所影响的行数为 4 行)
*/

select *
from t1 a
where not exists(select * from t1 where 名字=a.名字 and 入学日期>a.入学日期)

/*
名字 班级 入学日期
---------- ---------- ------------------------------------------------------
张三 高二 2006-01-01 00:00:00.000
李四 高三 2006-08-02 00:00:00.000

(所影响的行数为 2 行)
*/
-狙击手- 2007-11-29
  • 打赏
  • 举报
回复
create table tb(名字 char(6),班级 char(6),入学日期 datetime)
insert tb select '张三','高二','2006-01-01'
insert tb select '李四','高三','2003-01-02'
insert tb select '李四','高三','2006-08-02'
insert tb select '李四','高三','2004-03-03'


delete a
from tb a
where exists(select 1
from tb
where a.名字 = 名字 and 入学日期 > a.入学日期)

select * from tb
/*


名字 班级 入学日期
------ ------ ------------------------------------------------------
张三 高二 2006-01-01 00:00:00.000
李四 高三 2006-08-02 00:00:00.000

*/
drop table tb
中国风 2007-11-29
  • 打赏
  • 举报
回复
delete t from ta t where 入学日期 not in(select top 1 入学日期 from ta where 名字=t.名字 order by 入学日期 desc)

中国风 2007-11-29
  • 打赏
  • 举报
回复
delete t from ta t where 入学日期 not in(select max(入学日期 ) from ta where 名字=t.名字)
-狙击手- 2007-11-29
  • 打赏
  • 举报
回复
select *

from table a
where not exists(select 1 from table where a.名字 = 名字 and 入学日期 < a.入学日期)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧