16 个解决方案
#1
不管其他字段吗?
#2
有其它唯一标识一行的列吗?
如果有比如是ID
delete a
from ta a
where exists(select 1 from ta where StartDate = a.StartDate and id < a.id)
如果有比如是ID
delete a
from ta a
where exists(select 1 from ta where StartDate = a.StartDate and id < a.id)
#3
declare @tb table(id int identity,StartDate datetime)
insert @tb select
'2009-09-10' union all select
'2009-09-10' union all select
'2009-09-14'
delete @tb
from @tb t
where exists(select * from @tb where StartDate=t.StartDate and id>t.id)
select * from @tb
id StartDate
----------- -----------------------
2 2009-09-10 00:00:00.000
3 2009-09-14 00:00:00.000
(2 行受影响)
#4
我这是相当于一个工时录入系统,StartDate是录入的时间,但由于一些问题导致一个表中一个人有两行相同的开始时间,一个人不可能在同一时间做两件事!
但想在我要做工时统计,所以重复的项也被统计了,如何删除这重复的项???
但想在我要做工时统计,所以重复的项也被统计了,如何删除这重复的项???
#5
表里面元组很多,我不知道是哪个重复了!
重复的元组如:
personalNO StartDate
10716 2009-5-6 12:00:00
10716 2009-5-6 12:00:00
当然还有其他列,其他列的值不同
重复的元组如:
personalNO StartDate
10716 2009-5-6 12:00:00
10716 2009-5-6 12:00:00
当然还有其他列,其他列的值不同
#6
顶
#7
有唯一的标志列不?
比如自增列?
比如自增列?
#8
有ID是唯一标示,我去试试!
#9
--创建临时表#保存不重复记录
select distinct * into #test from warehouse
--删除源表的所有记录
delete from warehouse
--从临时表插入数据到源表,下面的语句根据需要,列出字段替换...
insert into warehouse
select *
from #test
--删除临时表#
drop table #test
go
#10
取标识列最大或最小的保留,其他删掉就好了
#11
declare @max integer,@id smalldatetime
declare cur_rows cursor local for
select StartDate,count(*) from table1 group by StartDate having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
set @max = @max -1
set rowcount @max
delete from table1 where StartDate= @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
2条一样的数据只能删除一条!
#12
2楼的方法很简练啊
#13
楼主说有自增列ID,删除源表记录里,用transcate table,可以ID重新开始
#14
1.将存在相同的记录查出into到临时表
2.删除存在相同字段值的记录
3.将临时表中的记录对每一不同的值取第一条插入
2.删除存在相同字段值的记录
3.将临时表中的记录对每一不同的值取第一条插入
#15
顶一个
#16
--楼主:能不能先把你那“相同”的标准说明白啊?\
--表中:记录的哪些字段相同时,就视为相同(重复)行呢?
--没个标准,你叫人家怎么回答啊?
#1
不管其他字段吗?
#2
有其它唯一标识一行的列吗?
如果有比如是ID
delete a
from ta a
where exists(select 1 from ta where StartDate = a.StartDate and id < a.id)
如果有比如是ID
delete a
from ta a
where exists(select 1 from ta where StartDate = a.StartDate and id < a.id)
#3
declare @tb table(id int identity,StartDate datetime)
insert @tb select
'2009-09-10' union all select
'2009-09-10' union all select
'2009-09-14'
delete @tb
from @tb t
where exists(select * from @tb where StartDate=t.StartDate and id>t.id)
select * from @tb
id StartDate
----------- -----------------------
2 2009-09-10 00:00:00.000
3 2009-09-14 00:00:00.000
(2 行受影响)
#4
我这是相当于一个工时录入系统,StartDate是录入的时间,但由于一些问题导致一个表中一个人有两行相同的开始时间,一个人不可能在同一时间做两件事!
但想在我要做工时统计,所以重复的项也被统计了,如何删除这重复的项???
但想在我要做工时统计,所以重复的项也被统计了,如何删除这重复的项???
#5
表里面元组很多,我不知道是哪个重复了!
重复的元组如:
personalNO StartDate
10716 2009-5-6 12:00:00
10716 2009-5-6 12:00:00
当然还有其他列,其他列的值不同
重复的元组如:
personalNO StartDate
10716 2009-5-6 12:00:00
10716 2009-5-6 12:00:00
当然还有其他列,其他列的值不同
#6
顶
#7
有唯一的标志列不?
比如自增列?
比如自增列?
#8
有ID是唯一标示,我去试试!
#9
--创建临时表#保存不重复记录
select distinct * into #test from warehouse
--删除源表的所有记录
delete from warehouse
--从临时表插入数据到源表,下面的语句根据需要,列出字段替换...
insert into warehouse
select *
from #test
--删除临时表#
drop table #test
go
#10
取标识列最大或最小的保留,其他删掉就好了
#11
declare @max integer,@id smalldatetime
declare cur_rows cursor local for
select StartDate,count(*) from table1 group by StartDate having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
set @max = @max -1
set rowcount @max
delete from table1 where StartDate= @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
2条一样的数据只能删除一条!
#12
2楼的方法很简练啊
#13
楼主说有自增列ID,删除源表记录里,用transcate table,可以ID重新开始
#14
1.将存在相同的记录查出into到临时表
2.删除存在相同字段值的记录
3.将临时表中的记录对每一不同的值取第一条插入
2.删除存在相同字段值的记录
3.将临时表中的记录对每一不同的值取第一条插入
#15
顶一个
#16
--楼主:能不能先把你那“相同”的标准说明白啊?\
--表中:记录的哪些字段相同时,就视为相同(重复)行呢?
--没个标准,你叫人家怎么回答啊?