SQL:在一列中删除重复项,同时保留另一列中具有最高值的行

时间:2016-04-06 14:04:18

标签: sql duplicates teradata

我正在使用Teradata并且我试图编写一些代码...我想根据ColumnA中的值删除columnB具有重复值的行 - 如果有人可以帮助我那将是很棒的!

我在columnA中有一个序列号,并希望保留columnA中值最高的行。 例如。在下表中,我想保留第9,7,6行和第9行。 2,因为虽然它们在第2列中有重复,但它们具有该字母的最高ColumnA值。

表名:DataTable

Column1    Column2     Column3     Column4     Column5

     1           B           X           X           X
     2           A           Y           Y           Y
     3           E           Z           Z           Z
     4           B           X           X           X
     5           C           Y           Y           Y
     6           E           Z           Z           Z
     7           C           X           X           X
     8           B           Y           Y           Y
     9           B           Z           Z           Z

2 个答案:

答案 0 :(得分:1)

如果您只想选择行,可以执行以下操作:

select t.*
from t
where t.columnA = (select max(t2.columnA) from t t2 where t2.columnB = t.columnB);

如果你真的想删除它们,那么一种方法是:

delete from t
where t.columnA < (select max(t2.columnA) from t t2 where t2.columnB = t.columnB);

答案 1 :(得分:0)

如果要使用SELECT返回这些行,则不需要相关子查询,OLAP函数通常表现更好:

select *
from tab
qualify
  row_number() over (partition by ColumnB order by columnA DESC) = 1

如果你真的想要DELETE其他行请去戈登的查询。