0

我在 postgres 中有一个不断更新的表。如果有 5 行可用,我想选择前 5 行并更新与之关联的标志。

At first the table looks like this
    id   name   flag
    11    ss     -
    22    aa     -
    12    bb     -
    13    cc     -
    14    dd     -
    23    ab     -
    24    cd     -
    25    ee     -

第一次选择5行后,表格应该如下

    id   name   flag
    11    ss     Y
    22    aa     Y
    12    bb     Y
    13    cc     Y
    14    dd     Y
    23    ab     -
    24    cd     -
    25    ee     -

并且下一次选择不应该发生,因为剩下的不是 5 行

4

1 回答 1

0

窗口函数可用于计算结果集中的所有行。尝试类似的东西

WITH unflagged AS (
    SELECT id FROM (
       SELECT id, count(*) over() AS cnt
       FROM your_table
       WHERE flag IS NULL
    ) WHERE cnt >= 5
    LIMIT 5
)
UPDATE your_table SET flag = Y
WHERE id IN (SELECT * FROM unflagged)
于 2013-11-05T11:39:14.193 回答