全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3480 11
2012-01-10
假设有数据如下:
Var1 Var2
a b
a c
b c
b a

在这个数据中,第一条记录和最后一条记录的意义是一样的,可以认为是重复的记录,那要怎么删除呢?
求教!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-1-10 10:46:32
一直木有人回答么.....
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-1-10 10:55:16
一、具有主键的情况
a.具有唯一性的字段id(为唯一主键)
delect   table   
where   id   not   in   
( select   max(id)   from   table   group   by   col1,col2,col3... )
group   by   子句后跟的字段就是你用来判断重复的条件,如只有col1,
那么只要col1字段内容相同即表示记录相同。

b.具有联合主键
假设col1+ ', '+col2+ ', '...col5   为联合主键
select   *   from     table   where   col1+ ', '+col2+ ', '...col5   in   ( select   max(col1+ ', '+col2+ ', '...col5)   from   table   where   having   count(*)> 1
group   by   col1,col2,col3,col4   )
group   by   子句后跟的字段就是你用来判断重复的条件,
如只有col1,那么只要col1字段内容相同即表示记录相同。


or
select   *   from   table     where   exists   (select   1   from   table   x   where   table.col1   =   x.col1   and   
table.col2=   x.col2   group   by   x.col1,x.col2   having   count(*)   > 1)

c:判断所有的字段
    select   *   into   #aa   from   table   group   by   id1,id2,....
    delete   table   
    insert   into   table   
    select   *   from   #aa

二、没有主键的情况

a:用临时表实现
select   identity(int,1,1)   as   id,*   into   #temp   from   ta
delect   #temp   
where   id   not   in   
(  select   max(id)   from   #   group   by   col1,col2,col3... )
delete   table   ta
inset   into   ta(...)
      select   .....   from   #temp

b:用改变表结构(加一个唯一字段)来实现
alter   table   表   add     newfield   int   identity(1,1)
delete   表
where   newfield   not   in
( select   min(newfield)   from   表   group   by   除newfield外的所有字段 )

alter   table   表   drop   column   newfield

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-1-10 10:55:43
一、具有主键的情况
a.具有唯一性的字段id(为唯一主键)
delect   table   
where   id   not   in   
( select   max(id)   from   table   group   by   col1,col2,col3... )
group   by   子句后跟的字段就是你用来判断重复的条件,如只有col1,
那么只要col1字段内容相同即表示记录相同。

b.具有联合主键
假设col1+ ', '+col2+ ', '...col5   为联合主键
select   *   from     table   where   col1+ ', '+col2+ ', '...col5   in   ( select   max(col1+ ', '+col2+ ', '...col5)   from   table   where   having   count(*)> 1
group   by   col1,col2,col3,col4   )
group   by   子句后跟的字段就是你用来判断重复的条件,
如只有col1,那么只要col1字段内容相同即表示记录相同。


or
select   *   from   table     where   exists   (select   1   from   table   x   where   table.col1   =   x.col1   and   
table.col2=   x.col2   group   by   x.col1,x.col2   having   count(*)   > 1)

c:判断所有的字段
    select   *   into   #aa   from   table   group   by   id1,id2,....
    delete   table   
    insert   into   table   
    select   *   from   #aa

二、没有主键的情况

a:用临时表实现
select   identity(int,1,1)   as   id,*   into   #temp   from   ta
delect   #temp   
where   id   not   in   
(  select   max(id)   from   #   group   by   col1,col2,col3... )
delete   table   ta
inset   into   ta(...)
      select   .....   from   #temp

b:用改变表结构(加一个唯一字段)来实现
alter   table   表   add     newfield   int   identity(1,1)
delete   表
where   newfield   not   in
( select   min(newfield)   from   表   group   by   除newfield外的所有字段 )

alter   table   表   drop   column   newfield

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-1-10 13:35:05
谢谢~
但看得不是太明白,特别是关于Max那块...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-1-10 14:34:37
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群