【发布时间】:2020-09-23 19:44:05
【问题描述】:
我有一个用户批次表。我只想选择直到我的总金额达到一定金额。
id | user_id | balance | batch_id
----|---------|-------- |--------
1 | 1 | 2 | 1
2 | 2 | 15 | 2
3 | 1 | 8 | 3
4 | 1 | 5 | 4
5 | 2 | 7 | 5
6 | 1 | 1 | 6
7 | 2 | 5 | 7
考虑以下查询:
SELECT * FROM tb_batch_user WHERE user_id = 1 ORDER BY batch_id asc
查询结果为:
id | user_id | balance | batch_id
----|---------|-------- |--------
1 | 1 | 2 | 1
3 | 1 | 8 | 3
4 | 1 | 5 | 4
6 | 1 | 1 | 6
我想在表上做一个选择,直到余额总数为 6。那么应该只返回 ids 1、2:
id | user_id | balance | batch_id
----|---------|-------- |--------
1 | 1 | 2 | 1
3 | 1 | 8 | 3
另一个余额总计为 1 的示例。那么应该只返回 ids 1:
id | user_id | balance | batch_id
----|---------|-------- |--------
1 | 1 | 2 | 1
余额总数为 11 的示例。应仅返回 id 1、3、4:
id | user_id | balance | batch_id
----|---------|-------- |--------
1 | 1 | 2 | 1
3 | 1 | 8 | 3
4 | 1 | 5 | 4
所以,在那之后我需要用 FOR UPDATE ex 锁定这些行:
SELECT * FROM tb_batch_user WHERE user_id = 1 ORDER BY batch_id asc FOR UPDATE
我尝试使用窗口功能,但它不允许锁定(用于更新)。感谢您的帮助。
【问题讨论】:
标签: sql postgresql sum window-functions gaps-and-islands