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

Sql 如何使用按时间和日期排序的唯一递增值更新所有行的列?,sql,postgresql,queue,window-functions,row-number,Sql,Postgresql,Queue,Window Functions,Row Number,我需要在postgres数据库中维护一个队列,我需要根据条目进入队列的时间(时间和日期)跟踪条目的位置,现在在我的应用程序中的某个时刻,我需要从数据库中删除一个或多个条目,在这种情况下,我需要根据条目加入的时间重新调整条目的位置,例如,这里是我的表结构 现在假设我们删除位置1的条目,在这种情况下,位置值为2的条目的位置应该分别更新为1和3到2,我尝试使用row_number()按以下方式执行 但这一切都很奇怪,我似乎无法理解为什么它会像这样更新所有的行 现在我想要的是,基于timejoin字段

我需要在postgres数据库中维护一个队列,我需要根据条目进入队列的时间(时间和日期)跟踪条目的位置,现在在我的应用程序中的某个时刻,我需要从数据库中删除一个或多个条目,在这种情况下,我需要根据条目加入的时间重新调整条目的位置,例如,这里是我的表结构 现在假设我们删除位置1的条目,在这种情况下,位置值为2的条目的位置应该分别更新为1和3到2,我尝试使用row_number()按以下方式执行

但这一切都很奇怪,我似乎无法理解为什么它会像这样更新所有的行


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

好的,已经整理好了,我所要做的就是比较主键id,而不是here子句Godamnt中的queueId列,原因是列队列id对所有行都具有相同的值

 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."id" = a."id";
 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."id" = a."id";