Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Atualizar com grupo por


Sua pergunta está um pouco confusa. Você diz que gostaria de definir o valor b para um valor mínimo da partição a essa coluna b está na linha com, enquanto as linhas contendo b = 1 deve permanecer intocado.

Pelo que posso ver em sua pergunta como comentários (suponho que seja sua saída esperada), você também deseja obter o valor mínimo que segue 1 dentro de uma partição - então você basicamente quer o valor mínimo de b que é maior que 1 .

Abaixo está a consulta SQL que faz isso
UPDATE t1 alias
  SET b = (
    SELECT min(b) 
    FROM t1 
    WHERE alias.a = t1.a 
      AND t1.b > 1 -- this would get the minimum value higher than 1
    GROUP BY a
  )
  WHERE alias.b > 1 -- update will not affect rows with b <= 1

Saída após atualização
 a | b 
---+---
 1 | 0
 1 | 1
 2 | 1
 2 | 2
 3 | 1
 3 | 2
 3 | 2
 4 | 1
 4 | 3
 4 | 3
 4 | 3