私はテーブルを重複排除するSQL文をスカルプトしようとしています。NULLSと最大値を使用した重複排除SQLステートメント比較値
テーブルには、ビジネスキーとして使用されるkey1、key2、key3という3つのキーがあります。 日付も使用されています。私は方法についての教育を受けておりません
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
:私は基礎としてこのコードを使用してきた
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.
:
のルールが(KEY1、KEY2、KEY3で試合を想定して)されていますSQL文にルールを適用します。どんな知恵があれば幸いです。
例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
あなたの質問は私には明らかではありません。サンプルデータと何が起こりたいのですか? –
@ arcee123の場合、条件が「いくつかの行に日付があり、他の行にNULLがある」場合は条件がカバーされません。 – Anton
@Anton、ありがとう。そのシナリオ内のすべてのレコードが最大(日付)の行が優先されます。 – arcee123