Oracle
 sql >> Database >  >> RDS >> Oracle

Aggiorna con raggruppa per

La tua domanda è un po' confusa. Dici che vorresti impostare il valore b a un valore minimo dalla partizione a quella colonna b è in riga con, mentre le righe contenenti b = 1 dovrebbe rimanere intatto.

Da quello che posso vedere nella tua domanda come commenti (presumo che sia l'output previsto) vuoi anche ottenere il valore minimo che segue 1 all'interno di una partizione, quindi in pratica vuoi il valore minimo di b che è maggiore di 1 .

Di seguito è riportata una query SQL che esegue questa operazione

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

Output dopo l'aggiornamento

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