Oracle:基于周期更新 select

Oracle: Update based on cyclical select

我很难找出以下 table 的 oracle 查询,我必须根据以下条件进行更新。

要求:

这里的key是account_number 基于account_number ,如果账户有多个user_numbers并且其中有user_numbers 如果任何 user_number 没有关联到除密钥以外的任何其他帐户,请将 user_number 状态更新为 'I',并保留具有多个帐户的 user_number(可以有密钥加上其他帐户),因为它 is.If 帐户只有一个用途,不要做任何事情。

create table cust_account(user_number number(10),account_number number(10),stat char(1));

Insert into cust_account(user_number,account_number,stat)values(123,345,'A')
Insert into cust_account(user_number,account_number,stat)values(226,345,'A')
Insert into cust_account(user_number,account_number,stat)values(226,456,'A')
Insert into cust_account(user_number,account_number,stat)values(556,767,'A')

提交;

输入:

预期输出; 这里 account_number 345 有两个 user_numbers 而其中 123 用户只有一个帐户被停用。 而 767 只有一种用途,所以在更新时甚至不要 select 它。

在此先感谢您的帮助。

如果你想要一个update查询,那么我会推荐一个相关的子查询:

update cust_account ca
set stat = 'I'
where stat = 'A' 
  and exists (select 1 
              from cust_account ca1 
              where ca1.stat = 'A'
                and ca1.account_number = ca.account_number 
                and ca1.user_number > ca.user_number)

如果你想要 select,那么使用 row_number():

select ca.*,
    case when stat = 'A' and row_number() over(partition by account_number, stat order by user_number desc) > 1
        then 'I'
        else stat
    end new_stat
from cust_account ca