Повторное упорядочение столбца с идентификатором в Postgresql - PullRequest
0 голосов
/ 18 мая 2011

Следующий код работает и создает временную таблицу с порядковым номером, который перезапускается для каждого нового имени:

with results as (select row_number() over (partition by name order BY name) as mytid,name from telephn_table)
select * from results order by name

Моя цель, однако, состоит в том, чтобы постоянно вставить новый порядковый номер в телефонный стол. Как перенести новый порядковый номер из таблицы результатов в таблицу телефона? Я столкнулся со следующим для MySql, но не смог преобразовать его в Postgresql.

MySQL: добавить столбец последовательности на основе другого поля

Может кто-нибудь помочь?

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Если память служит, row_number() возвращает число в своем собственном разделе.Другими словами, row_number() over (partition by name order BY name) будет возвращать 1 для каждой строки, кроме дубликатов.Вы, скорее всего, захотите rank() over (order by name) вместо.


После долгого обсуждения:

update telephn_table
set sid = rows.new_sid
from (select pkey,
             row_number() over (partition BY name) as new_sid,
             name
      from telephn_table
      ) as rows
where rows.pkey = telephn_table.pkey;
0 голосов
/ 19 мая 2011

ЭТО РАБОТАЕТ!(См. Мою ссылку OP на предыдущую ссылку MySql. В Postgresql она работает без необходимости во временной таблице)

изменить таблицу telephn_table добавить столбец tid integer default 0;ОБНОВЛЕНИЕ telephn_table set tid = (SELECT count (*) + 1 из telephn_table t, где t.sid

...