Câu hỏi của bạn hơi khó hiểu, bạn nói rằng bạn muốn đặt giá trị b
đến giá trị tối thiểu từ phân vùng a
cột đó b
liên tiếp với, trong khi các hàng chứa b = 1
nên được giữ nguyên.
Từ những gì tôi có thể thấy trong câu hỏi của bạn dưới dạng nhận xét (tôi cho rằng đó là kết quả mong đợi của bạn), bạn cũng muốn nhận được giá trị nhỏ nhất theo sau 1
trong một phân vùng - vì vậy về cơ bản bạn muốn giá trị nhỏ nhất của b
lớn hơn 1
.
Dưới đây là truy vấn SQL thực hiện điều này
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
Đầu ra sau khi cập nhật
a | b
---+---
1 | 0
1 | 1
2 | 1
2 | 2
3 | 1
3 | 2
3 | 2
4 | 1
4 | 3
4 | 3
4 | 3