如何使用按时间和日期排序的唯一增值来更新所有行的列?

时间:2018-09-28 03:03:59

标签: sql postgresql queue window-functions row-number

我在postgres数据库中有一个队列要维护,我需要根据条目进入队列的时间(时间和日期)来跟踪条目的位置,现在在我的应用程序中的某个时候,我需要删除一个或来自数据库的更多条目,在这种情况下,我需要相对于它们加入的时间重新排列条目的位置,例如,这是我的表结构 enter image description here 现在假设我们删除位置1的条目,在这种情况下,位置值2的条目的位置应分别更新为1,位置值3的条目应更新为2,我尝试使用row_number()进行以下操作

update waitingvisitor upd
set position = a.row_number
FROM (
SELECT "queueId", row_number() over(order by "timeJoined")
from waitingvisitor
ORDER BY  "timeJoined"
) as a
where upd."queueId" = a."queueId";

但是所有的操作都很奇怪,我似乎无法理解它为什么更新所有这样的行 enter image description here

现在我想要的是,基于timeJoined字段,列“ position”的值应相应更新,例如,最早加入的列应被赋予更高的优先级。这是怎么了

1 个答案:

答案 0 :(得分:0)

已经解决了,我要做的就是比较主键ID而不是here子句Godamnt中的queueId列,我认为原因是列队列ID的所有行都带有相同的值。

Id