2016-03-22 9 views
-1

Ich habe ein Szenario für eine Tabelle Typ2, wo ich Duplikate auf Gesamtzeilenebene entfernen muss.Entfernen von Duplikaten aus Netezza Tabelle

Betrachten wir unten Beispiel als die Daten in der Tabelle.

A|B|C|D|E 
100|12-01-2016|2|3|4 
100|13-01-2016|3|4|5 
100|14-01-2016|2|3|4 
100|15-01-2016|5|6|7 
100|16-01-2016|5|6|7 

Wenn Sie A als Schlüsselspalte betrachten, wissen Sie, dass die letzten 2 Zeilen Duplikate sind.

Um Dubletten zu finden, verwenden wir im Allgemeinen Gruppe für Funktion. 2 | | 3 | 4 Doppelt- und auch 100 | 5 | 6 | 7

select A,C,D,E,count(1) 
from table 
group by A,C,D,E 
having count(*)>1 

für diesen Ausgang würde 100 sein. Allerdings ist nur 100 | 5 | 6 | 7 nur nach Typ 2 und nicht 100 | 2 | 3 | 4 doppelt vorhanden, da dieser Wert im 3. Lauf und nicht bald nach dem 1. Laden zurückkommt. Wenn ich ein Datumsfeld zu einer Gruppe hinzufüge um 100 | 5 | 6 | 7 wird nicht als Duplikat betrachtet, aber in Wirklichkeit ist es das.

Der Versuch, Duplikate wie oben beschrieben herauszufinden. Duplikate sollten nur 100 | 5 | 6 | 7 und nicht 100 | 2 | 3 | 4 sein. kann jemand bitte mit SQL für das gleiche helfen.

Grüße Raghav

+0

was meinst du mit Typ 2? –

+0

Sie haben nur zwei im Ergebnis dupliziert: 100 | 12-01-2016 | 2 | 3 | 4> 100 | 12-01-2016 | 2 | 3 | 4 und 100 | 15-01-2016 | 5 | 6 | 7> 100 | 16-01-2016 | 5 | 6 | 7 –

+0

@vkp I Bedeutet CDC Typ 2, in dem Sie Verlauf und aktuelle Daten verwalten. – Raghav

Antwort

0

, wenn Sie alle duplizierten Zeilen sehen möchten, müssen Sie Tabelle mit Ihrer Gruppe durch Abfrage oder Filtertabelle mit Gruppenabfrage als Unterabfrage beitreten.

0
wITH CTE AS (select a, B, C,D,E, count(*) 
from TABLE 
group by 1,2,3,4,5 
having count(*)>1) 

sELECT * FROM cte 
WHERE B <> B + 1 

Versuchen Sie diese Abfrage und sehen Sie, ob es funktioniert. Falls Sie irgendwelche Fehler bekommen, lassen Sie es mich wissen.

Ich gehe davon aus, dass Ihre Spalte B in dem Datumsformat ist, wenn nicht, dann es bisher gegossen

Wenn Sie das Duplikat sehen können dann wählen Sie einfach ersetzen *

0

Verwenden ROW_NUMBER analytische Funktion löschen zu erhalten los von Duplikaten.

delete from 
(
select a,b,c,d,e,row_number() over (partition by a,b,c,d,e) as rownumb 
from table 
) as a 
where rownumb > 1