删除部分重复忽略 SQL 中的空值

Removing Partial Duplicates Ignoring Nulls in SQL

我有一个 table,其中包含两个可能的唯一标识符(ID1 和 ID2)。每行将具有这些标识符中的一个或两个。每个 ID 的每一行中的数据完全相同,时间戳除外。我想从每个值中消除重复项,但将空值视为唯一值。

本题: How to delete duplicate rows in sql server?

推荐我访问这个网站: http://www.codaffection.com/sql-server-article/delete-duplicate-rows-in-sql-server/

我在哪里提出了以下查询:

WITH CTE AS
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY ID1 ORDER BY ID1) AS RN
FROM Filings_Search
)

DELETE FROM CTE WHERE RN<>1

不幸的是,这也删除了我所有的空值!如何修改此查询以避免删除空值?

编辑: 这是我的数据的示例(如果有人知道如何格式化 tables,请告诉我。我使用了 https://senseful.github.io/text-table/)。

+------+------+----------+-----------+
| ID1  | ID2  |   Data   | Timestamp |
+------+------+----------+-----------+
| NULL | abc  | macd     | 01:40     |
| NULL | abc  | macd     | 04:23     |
| NULL | def  | pfchangs | 01:41     |
| 123  | NULL | wendys   | 02:42     |
| 123  | NULL | wendys   | 03:45     |
+------+------+----------+-----------+
ID1 上的

运行 会输出:

+------+------+----------+-----------+
| ID1  | ID2  |   Data   | Timestamp |
+------+------+----------+-----------+
| NULL | abc  | macd     | 01:40     |
| NULL | abc  | macd     | 04:23     |
| NULL | def  | pfchangs | 01:41     |
| 123  | NULL | wendys   | 02:42     |
+------+------+----------+-----------+

运行 在 ID2 上会输出:

+------+------+----------+-----------+
| ID1  | ID2  |   Data   | Timestamp |
+------+------+----------+-----------+
| NULL | abc  | macd     | 01:40     |
| NULL | def  | pfchangs | 01:41     |
| 123  | NULL | wendys   | 02:42     |
| 123  | NULL | wendys   | 03:45     |
+------+------+----------+-----------+

抱歉,如果这是重复的,我是 SQL 初学者,找不到与我正在寻找的完全相同的内容。

怎么样:

 DELETE FROM CTE 
 WHERE RN<>1
   AND ID1 IS NOT NULL

使用ID2,分区中的数据

   WITH CTE AS (
        SELECT f.*, ROW_NUMBER() OVER (PARTITION BY  ID2,data ORDER BY Timestamp ) AS RN
        FROM Filings_Search 
    )
    DELETE FROM CTE WHERE RN<>1