sql >> Base de Datos >  >> RDS >> Oracle

Actualizar con grupo por

Tu pregunta es un poco confusa. Dices que te gustaría establecer el valor b a un valor mínimo de la partición a esa columna b está en fila con, mientras que las filas que contienen b = 1 debe permanecer intacto.

Por lo que puedo ver en su pregunta como comentarios (supongo que es su resultado esperado), también desea obtener el valor mínimo que sigue a 1 dentro de una partición, por lo que básicamente desea el valor mínimo de b que es mayor que 1 .

A continuación se muestra la consulta SQL que hace esto

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

Salida después de la actualización

 a | b 
---+---
 1 | 0
 1 | 1
 2 | 1
 2 | 2
 3 | 1
 3 | 2
 3 | 2
 4 | 1
 4 | 3
 4 | 3
 4 | 3