postgresql - 如果有n个可用的未标记行,则选择n行数并更新标志

时间:2013-11-05 11:28:51

标签: sql postgresql

我在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行

1 个答案:

答案 0 :(得分: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)