我正在使用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
答案 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
其他行请去戈登的查询。