Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Aktualisieren mit gruppieren nach

Ihre Frage ist etwas verwirrend. Sie sagen, dass Sie den Wert b setzen möchten auf einen Minimalwert von Partition a diese Spalte b ist in Zeile mit, während die Zeilen b = 1 enthalten sollte unberührt bleiben.

Von dem, was ich in Ihrer Frage als Kommentare sehen kann (ich nehme an, es ist Ihre erwartete Ausgabe), möchten Sie auch den Mindestwert erhalten, der 1 folgt innerhalb einer Partition - Sie möchten also im Grunde den Mindestwert von b das ist größer als 1 .

Unten ist eine SQL-Abfrage, die dies tut

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

Ausgabe nach Update

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