Pertanyaan Anda agak membingungkan. Anda mengatakan ingin menetapkan nilai b
ke nilai minimum dari partisi a
kolom itu b
berada di baris dengan, sedangkan baris berisi b = 1
harus tetap tidak tersentuh.
Dari apa yang saya lihat dalam pertanyaan Anda sebagai komentar (saya menganggap itu adalah hasil yang Anda harapkan), Anda juga ingin mendapatkan nilai minimum yang mengikuti 1
dalam sebuah partisi - jadi pada dasarnya Anda menginginkan nilai minimum b
yang lebih besar dari 1
.
Di bawah ini adalah kueri SQL yang melakukan ini
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
Keluaran setelah pembaruan
a | b
---+---
1 | 0
1 | 1
2 | 1
2 | 2
3 | 1
3 | 2
3 | 2
4 | 1
4 | 3
4 | 3
4 | 3