仅更新最大的行 - 基于顺序的更新

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
)