2016-04-06 23 views
0

Teradata kullanıyorum ve bazı kod yazılmaya çalışıyorum ... B sütununun kopya olduğu satırları kaldırmak istiyorum. ColumnA'daki değerlere dayanarak - eğer herkes bana yardımcı olabilirse harika olur!SQL: Başka bir sütunda en yüksek değere sahip satırı korurken bir sütunda çoğaltmaları silme

A sütununda bir sıralı numaram var ve sütunu A sütunundaki en yüksek değere sahip tutmak istiyorum. örn. Aşağıdaki tabloda, 9,7,6 & 2 satırlarını korumak istiyorum, çünkü 2 sütununda bir kopyası olsa da, bu Harf için en yüksek ColumnA değerine sahipler.

Tablo adı: Sadece satırları seçmek istiyorsanız

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

SO'ya hoş geldiniz. Beklenen sonucu, daha önce kullanılanla aynı tablo biçiminde eklediyseniz daha da iyi olur. – jarlh

+1

"ColumnA" deyin, ancak tablonun "Column1" vb. Var. – jarlh

+0

tamam, teşekkürler. – Surfing

cevap

1

DataTable, yapabileceğiniz:

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

aslında bunları kaldırmak istiyorsanız, o zaman bir yöntemdir:

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

Çok teşekkürler, bu harika: o) – Surfing

0

Bu satırları SELECT kullanarak döndürmek istiyorsanız, İlişkilendirmeye gerek yoktur. Alt sorgu, OLAP fonksiyonları genellikle daha iyi performans:

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

aslında diğer satırlar Gordon'un sorgu için gitmek DELETE istiyorum.

+0

Teşekkürler, istediğim şey buydu, satır 2,9,7,6 döndürdü. – Surfing

+0

Yardımlarınız için şerefe – Surfing

+0

Bir sonraki adım, diğer satırları silmektir, bu yüzden Gordon'un sorgusunu kullanmam gerekebilir. – Surfing