从重复行中选择一项

Selecting one item from duplicate rows

我有一个 SQL 查询来检查 table 并给我找到的任何重复项。我需要做的只是select其中之一,最好每次都一样。

这是我的查询:

SELECT COUNT(t.Value) AS Count,
    t.Code
FROM dbo.Table t
GROUP BY t.Code, t.Value
HAVING COUNT(t.Value) > 1

它returns我的结果如下:

Count   Code
2   Duplicate_1
2   Duplicate_2
2   Duplicate_3

其中每一个都有自己的 ID,我想弄清楚如何只抓取一个 IDtop 1 id,但还没有找到可行的解决方案还没有。

我只需要每个 Code 中的 ID 一个,这样我就可以稍后删除它。

这是 table 的样子。理想情况下应该永远只有一行 Code 但不知何故重复发生了。

id    Value Code
1    3  Duplicate_3
2    63 Im_Not_A_Dup
3    1  Duplicate_1
4    2  Duplicate_2
5    2  Duplicate_2
6    64 Im_Not_A_Dup
7    1  Duplicate_1
8    65 Im_Not_A_Dup
9    66 Im_Not_A_Dup
10   3  Duplicate_3

预期结果:

id  Type_Code
3   Duplicate_1
4   Duplicate_2
1   Duplicate_3

如果要删除 SQL 服务器中的重复项,请使用可更新的 CTE 和 row_number():

with todelete as (
      select t.*, row_number() over (partition by code, id order by code) as seqnum
      from dbo.table t
     )
delete from todelete
    where seqnum > 1;

您可以用更确定的顺序替换 order by code。例如,如果您有一个 createAt 列,您可以删除除最旧或最新之外的所有列。

根据您的示例数据和预期结果,您可以使用 MIN 函数获取 ID 并使用 where 子句排除 code = 'Im_Not_A_Dup'

CREATE TABLE T(
  id  INT,
  Code VARCHAR(50)
);


INSERT INTO T VALUES (1,'Duplicate_3');
INSERT INTO T VALUES (2,'Im_Not_A_Dup');
INSERT INTO T VALUES (3,'Duplicate_1');
INSERT INTO T VALUES (4,'Duplicate_2');
INSERT INTO T VALUES (5,'Duplicate_2');
INSERT INTO T VALUES (6,'Im_Not_A_Dup');
INSERT INTO T VALUES (7,'Duplicate_1');
INSERT INTO T VALUES (8,'Im_Not_A_Dup');
INSERT INTO T VALUES (9,'Im_Not_A_Dup');
INSERT INTO T VALUES (10,'Duplicate_3');

查询 1:

SELECT MIN(t.Id) Id,
        t.Code
FROM  t
WHERE Code <> 'Im_Not_A_Dup'
GROUP BY t.Code

Results:

| Id |        Code |
|----|-------------|
|  3 | Duplicate_1 |
|  4 | Duplicate_2 |
|  1 | Duplicate_3 |