Как обновить столбец всех строк с уникальным увеличенным значением, упорядоченным по времени и дате? - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть очередь для ведения в базе данных 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 голосов
/ 28 сентября 2018

Ладно, с этим разобрались, все, что мне нужно было сделать, это сравнить идентификаторы первичного ключа вместо столбцов queueId в предложении здесь, Godamnt, поэтому я считаю, что идентификатор очереди столбцов содержит одинаковое значение для всех строк.

 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";
...