使用分组依据从重复记录中选择唯一记录

时间:2019-11-21 18:53:14

标签: sql group-by duplicates

我有一个重复记录的表,例如具有相同帐号的多个记录。像这样

snippet of duplicate records

现在,我只想选择那些满足以下条件优先级的记录id:

  1. 选择prim_cust为X的帐号
  2. 如果X为空,则选择具有dept_id不为空的帐号。
  3. 都为空,我们应该选择min(id)。

在这里,我们将必须对帐号进行分组并执行上述条件。 我只希望满足上述条件的具有唯一帐号的单条记录。

条件应优先考虑

final output

1 个答案:

答案 0 :(得分:1)

我认为您有一个优先级查询,您希望根据自己的各种规则,每acct_nbr行一行。

对于这类问题,row_number()非常方便:

select t.*
from (select t.*,
             row_number() over (partition by acct_nbr
                                order by (case when prim_cust = 'X' then 1 else 2 end),
                                         (case when dept_id is not null then 1 else 2 end),
                                         id
                               ) as seqnum
      from t
     ) t
where seqnum = 1;
相关问题