仅更新最大的行 - 基于顺序的更新
Update only the greatest row - Sequential Based Update
我想写一个查询来找到 status = REQUEST_PENDING 的最低序列,然后在特定条件后更新它。
例如:
person_name
status
sequence
a
request_progressed
1
b
request_pending
2
c
request_pending
3
如果叫A的人完成了,状态会从“request_progressed”变成“request_done”;那么下一个人 B 的状态将更改为“request_progressed”,而人 C 保持不变,因为它的顺序是第 3 个。
所以我只需要知道如何通过找到具有“request_pending”状态且只有一个“request_progressed”的最低序列来更改人员 B 的状态” 在 table 上,这就是为什么当它更新为“request_done”时,下一个“request_pending”需要更新为“request_progressed”。
我尝试了以下方法:
update table
set status = 'request_progressed'
where status = 'pending' AND sequence = min(sequence)
在 MySQL 中 - 您可以在更新查询中指定顺序和限制:
update t
set status = 'request_progressed'
where status = 'request_pending'
order by sequence
limit 1
在 PostgreSQL 中 - 您仍然需要 order by 和 limit 但它们只能在子查询中使用:
update t
set status = 'request_progressed'
where (status, sequence) in (
select status, sequence
from t
where status = 'request_pending'
order by sequence
offset 0 rows fetch first 1 row only
)
我想写一个查询来找到 status = REQUEST_PENDING 的最低序列,然后在特定条件后更新它。
例如:
person_name | status | sequence |
---|---|---|
a | request_progressed | 1 |
b | request_pending | 2 |
c | request_pending | 3 |
如果叫A的人完成了,状态会从“request_progressed”变成“request_done”;那么下一个人 B 的状态将更改为“request_progressed”,而人 C 保持不变,因为它的顺序是第 3 个。
所以我只需要知道如何通过找到具有“request_pending”状态且只有一个“request_progressed”的最低序列来更改人员 B 的状态” 在 table 上,这就是为什么当它更新为“request_done”时,下一个“request_pending”需要更新为“request_progressed”。
我尝试了以下方法:
update table
set status = 'request_progressed'
where status = 'pending' AND sequence = min(sequence)
在 MySQL 中 - 您可以在更新查询中指定顺序和限制:
update t
set status = 'request_progressed'
where status = 'request_pending'
order by sequence
limit 1
在 PostgreSQL 中 - 您仍然需要 order by 和 limit 但它们只能在子查询中使用:
update t
set status = 'request_progressed'
where (status, sequence) in (
select status, sequence
from t
where status = 'request_pending'
order by sequence
offset 0 rows fetch first 1 row only
)