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 に答える