SQL表删除重复数据

数据表名称   abc
用的是sql 2000 的  所以所用的语句只能适用于  SQL 2000
求个简单方便灵活运用的  查询  删除 重复记录的语句

可能我没说明白,大家也看到这个表了,autoID这一列是序号,从1往後排的,不可能重复,然後A B C D E  这五列里面的内容 都相同的话 就算是重复数据了 那麼 在G列的日期大於2014-06-01的条件下 只保留一条数据 多馀的重复数据 我想要删除了
例如  倒数一二行数据 
我只想保留 倒数第二行的那一条。要想删除倒数第一行的那一条,因为他是多馀重复的数据。

请给出 一条,查询语句,和一条 删除语句 注:请根据问题对应的表名 字段名 写出语句,谢谢了。。。。  表名  abc   字段: AutoID A B C D E F G

删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from TABLEA a
where (a.A,a.B,a.C,a.D,a.E) in (select A,B,C,D,E from TABLEA group by A,B,C,D,E having count(*) > 1)
and rowid not in (select min(rowid) from TABLEA group by A,B,C,D,E having count(*)>1)
and G > cast('2014-06-01' as datetime).

满足的G列跟重复行的关系没描述清楚,不晓得具体什么意思。
G的限制,我放最外边了。
你可以根据题目意思,挑地方放进去最后日期的限制。

===分隔线====================
刚看到追加..
做以下补充
查询:
select * from abc
where G > cast('2014-06-01' as datetime)
group by A,B,C,D,E
having count(*)>1

删除的话,还是参照第一次回答,使用了子查询:
delete from abc a
where (a.A,a.B,a.C,a.D,a.E) in
(
select A,B,C,D,E from abc
where G > cast('2014-06-01' as datetime)
group by A,B,C,D,E having count(*) > 1
)
and autoid not in
(
select min(autoid) from abc
where G > cast('2014-06-01' as datetime)
group by A,B,C,D,E
having count(*)>1
)

以上,你可以参考下,当然,根据具体数据逻辑,还有更简便的写法吧。加油撒~~
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-06-11

     按AutoID筛选出不重复数据

    SELECT A,B,C,D,E,F,G,MAX([AutoID])  ID FROM abc GROUP BY A,B,C,D,E,F,G

    删除其他不需要的重复数据
    DELETE FROM abc WHERE [AutoID] NOT IN
    (
    SELECT ID FROM (
    SELECT A,B,C,D,E,F,G,MAX([AutoID]) AS ID FROM abc GROUP BY A,B,C,D,E,F,G) AS A
    )

    不理解你的 “在G列的日期大於2014-06-01的条件下 只保留一条数据”


相似回答