Twoje pytanie jest nieco mylące.Mówisz, że chcesz ustawić wartość b
do minimalnej wartości z partycji a
ta kolumna b
jest w wierszu z, podczas gdy wiersze zawierające b = 1
powinien pozostać nietknięty.
Z tego, co widzę w twoim pytaniu jako komentarze (zakładam, że jest to oczekiwany wynik), chcesz również uzyskać minimalną wartość, która następuje po 1
wewnątrz partycji - więc zasadniczo potrzebujesz minimalnej wartości b
to jest większe niż 1
.
Poniżej znajduje się zapytanie SQL, które to robi
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
Dane wyjściowe po aktualizacji
a | b
---+---
1 | 0
1 | 1
2 | 1
2 | 2
3 | 1
3 | 2
3 | 2
4 | 1
4 | 3
4 | 3
4 | 3