删除重复项并在表中保留唯一值

时间:2019-08-21 21:57:14

标签: sql-server

我有一张包含以下数据的表。如何从表中检索唯一值。我的代码为我提供了唯一的值,但删除了没有重复的statuschangeid 7,并找到了该双待的最新批准。特定dupid的有效行是该组的statuschangeid的最大值。我在这里做什么错了?

实际表格

statuschangeid   dupid  approvalpending 
1                  1           1
2                  1           1
3                  1           0
4                  2           0
5                  2           0
6                  2           0
7                  3           0

预期表

statuschangeid   dupid  approvalpending 
3                  1           0
6                  2           0
7                  3           0

我得到的输出

statuschangeid   dupid  approvalpending 
3                  1           0
6                  2           0

我正在使用的代码是:

select dupid, approvalpending, max(statuschangeid) as maxid from tableA group by dupid, approvalpending having count(*) > 1

1 个答案:

答案 0 :(得分:0)

如果您不想删除行而只删除选择查询,请使用NOT EXISTS:

select a.statuschangeid, a.dupid, a.approvalpending
from tableA a
where not exists (
  select 1 from tableA
  where dupid = a.dupid and statuschangeid > a.statuschangeid
)

请参见demo
结果:

> statuschangeid | dupid | approvalpending
> -------------: | ----: | --------------:
>              3 |     1 |               0
>              6 |     2 |               0
>              7 |     3 |               0