0

以下代码工作并创建一个带有序列号的临时表,该序列号为每个新名称重新启动:

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:基于另一个字段添加序列列

任何人都可以帮忙吗?

4

2 回答 2

3

如果有记忆,则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;
于 2011-05-18T01:42:38.500 回答
0

这行得通!(请参阅我的 OP 链接到以前的 MySql 链接。在 Postgresql 中,它无需临时表即可工作)

alter table telephn_table add column tid integer default 0; UPDATE telephn_table set tid=(SELECT count(*)+1 from telephn_table t where t.sid < telephn_table.sid and telephn_table.name=t.name)

于 2011-05-18T21:53:20.480 回答