在我的数据库中,我关注三个字段:Name、time_dupe 和rank_dupe。
“名称”字段是标准化的*,但重复了很多次(重复也可以)。
'time_dupe' 是名称重复的次数。它附加到每个重复记录[见下文]。
“rank_dupe”是我尝试附加到表中的内容。如果记录重复 5 次,我希望“rank_dupe”字段按 1、2、3、4、5 排序,最低“id”编号为 1。
数据如下:
id name time_dupe rank_dupe
66 Joe Bland 4
2622 Joe Bland 4
73 Joe Bland 4
22 Joe Bland 4
99 Mary Fields 2
13 Mary Fields 2
2401 John Saturday 1
我想最终得到什么:
id name time_dupe rank_dupe
22 Joe Bland 4 1
66 Joe Bland 4 2
73 Joe Bland 4 3
2622 Joe Bland 4 4
13 Mary Fields 2 1
99 Mary Fields 2 2
2401 John Saturday 1 1
此查询将以正确的顺序为我列出记录,但我不知道如何更改它,因此它会更新表:
SELECT
id,
name,
ROW_NUMBER() OVER (
PARTITION BY name
ORDER BY id
) AS row_num
FROM
myTable
有人知道如何更改此设置,以便将“row_num”添加到表字段“rank_dupe”吗?
使用子查询是一种方法。我猜 id 在桌子上是唯一的。
使用,
UPDATE myTable m
INNER JOIN (SELECT id,
ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) AS row_num
FROM
myTable
) m1 on m1.id = m.id
SET m.rank_dupe = m1.row_num