Oracle
 sql >> Base de données >  >> RDS >> Oracle

Mettre à jour avec grouper par

Votre question est un peu confuse.Vous dites que vous souhaitez définir la valeur b à une valeur minimale de la partition a cette colonne b est en ligne avec, tandis que les lignes contenant b = 1 devrait rester intact.

D'après ce que je peux voir dans votre question sous forme de commentaires (je suppose que c'est votre sortie attendue), vous souhaitez également obtenir la valeur minimale qui suit 1 dans une partition - vous voulez donc essentiellement la valeur minimale de b supérieur à 1 .

Ci-dessous, la requête SQL qui fait cela

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

Sortie après mise à jour

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