postgresql-如果有n个未标记行可用,则选择n个行,并更新标志
我在postgres中有一个不断更新的表。如果有5行可用,我想选择前5行,并更新与之关联的标志postgresql-如果有n个未标记行可用,则选择n个行,并更新标志,sql,postgresql,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
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行了窗口函数可以用来计算结果集中的所有行。试试像这样的东西
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)
上面是将cnt设置为8(因为只有8行),我想要的正是前5行,其中标志为Null。你是对的,我错过了限制。该查询只是为了说明如何获取和过滤结果集中的记录数。