sql 中删除重复数据的方法
a.刪除完全重復數據
create table #t1(SN varchar(30))
insert into #t1
?? values('a'),('a'),('a'),('b'),('b'),('c')
select * from (select *,ROW_NUMBER()over(partition by sn order by sn) as seq from #t1) as aa
?
delete aa from (select *,ROW_NUMBER()over(partition by sn order by sn) as seq from #t1) as aa
where aa.seq<>1
?
select * from #t1
?
b.刪除不完全重復數據
--原寫法:
注:表#tmpTrace中有多筆重復記錄,但是時間字段的值不同
DELETE a FROM #tmpTrace a
?? WHERE EXISTS(SELECT * FROM?
?? ???????(SELECT sn,station,min(TransDateTime) AS TransDateTime FROM #tmpTrace GROUP BY sn,station HAVING count(*)>1) b
?? ???????????? WHERE a.sn=b.sn AND a.TransDateTime<>b.TransDateTime and a.station=b.station)
?
--使用派生表的寫法:
delete aa from (
????????????? select *,
???????????? ROW_NUMBER()over(partition by SN,station order by TransDateTime) as Seq
????????????? from #tmpTrace
?????????? ) as aa
where aa.Seq<>1
?
--P.S:上面寫法保留的是時間最小的數據,有些時候需要保留最新的一筆數據,這樣在order by時加上DESC就可以了
轉載于:https://www.cnblogs.com/Susie2012/archive/2012/11/19/2777226.html
總結
以上是生活随笔為你收集整理的sql 中删除重复数据的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 今晚开始新的阶段
- 下一篇: ARM开发软件及实用软件介绍