Ich versuche, eine SQL-Anweisung zu formen, um eine Tabelle zu deduplizieren.Design Deduplizierung SQL-Anweisung mit NULLS vs MAXWERT
Die Tabelle enthält drei Schlüssel: Schlüssel1, Schlüssel2, Schlüssel3, der als Geschäftsschlüssel verwendet wird. Ein Datum wird ebenfalls verwendet.
Die Regeln werden (vorausgesetzt, Streichhölzer in Tasten 1, 2, key3):
If all rows have dates, retain only MAX(date)
If one row has a date, and others are NULL, retain only row with date
If all rows has date = NULL, keep all rows.
Ich habe als Grundlage diesen Code unter Verwendung von:
WITH CTE AS(
SELECT [key1], [key2], [key3], [date],
RN = ROW_NUMBER()OVER(PARTITION BY [key1], [key2], [key3], [date] ORDER BY [date] desc)
FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1
ich erzogen bin nicht, wie man Wenden Sie die Regeln für die SQL-Anweisung an. Jede Weisheit würde sehr geschätzt werden.
Beispiel deduplications:
CASE 1: before dedupication:
key1 key2 key3 date
1 A 1 null
1 A 1 null
1 A 1 null
after deduplication:
key1 key2 key3 date
1 A 1 null
1 A 1 null
1 A 1 null
CASE 2: before dedupication:
key1 key2 key3 date
1 A 1 1/1/2016
1 A 1 1/1/2016
1 A 1 1/1/2016
after deduplication:
key1 key2 key3 date
1 A 1 1/1/2016
CASE 3: before dedupication:
key1 key2 key3 date
1 A 1 1/1/2016
1 A 1 1/2/2016
1 A 1 1/3/2016
after deduplication:
key1 key2 key3 date
1 A 1 1/3/2016
CASE 4: before deduplication
1 A 1 1/1/2016
1 A 1 1/1/2016
1 A 1 null
after deduplication:
key1 key2 key3 date
1 A 1 1/1/2016
CASE 5: before deduplication
1 A 1 1/1/2016
1 A 1 1/2/2016
1 A 1 null
after deduplication:
key1 key2 key3 date
1 A 1 1/2/2016
Ihre Frage ist mir nicht klar. Können Sie Beispieldaten einschließen und was Sie wollen? –
@ arcee123, Ihre Bedingungen decken nicht "Wenn ein paar Zeilen ein Datum haben und andere Zeilen NULL haben". – Anton
@Anton, danke. die Zeile mit dem Maximum (Datum) hat Vorrang vor allen Datensätzen in diesem Szenario. – arcee123