row_number 不是唯一的重复记录
row_number is not unique for duplicate records
我试图从每个 uuid 的一堆行中找到特定行的最新更新。
为此,我们在分区上使用 row_number()
,如下所示,
"row_number"() OVER (
PARTITION BY "uuid"
ORDER BY "uuid" ASC,
"status"."sequence" DESC,
"modifiedon" DESC
) "row_id_ranked",
在此之后,除 'row_id_ranked = 1' 之外的任何内容都将被丢弃。但是当 retry/re-transmission 发生时, "status"."sequence"
和 "modifiedon"
将完全相同。这将创建具有 row_id_ranked=1
的多行。使其难以移除。
根据我对 documentation 的理解,row_number
应该是唯一值。但是对于这些重复的情况,显然不是。
row_number() → bigint#
Returns a unique, sequential number for each row, starting with one,
according to the ordering of rows within the window partition.
在这种情况下如何删除重复数据?
假设不存在状态序列之外的第三列并在日期上修改以打破潜在的平局,并且假设您不关心保留哪条记录,您可以使用 RANDOM()
这里:
ROW_NUMBER() OVER (PARTITION BY uuid
ORDER BY "status"."sequence" DESC, modifiedon DESC, RANDOM())
AS row_id_ranked
如果您在行号的“结束”子句中使用“按 uuid 分区”,您将为每个不同的 uuid 获得第 1 行。也就是说,您已按 uuid 对数据进行分区,并且每个分区的编号将重新开始,如您发布的定义所示。
我认为您只想使用 order by,它将 return 1 行号 1.
"row_number"() OVER (
ORDER BY "uuid" ASC,
"status"."sequence" DESC,
"modifiedon" DESC
) "row_id_ranked",
我试图从每个 uuid 的一堆行中找到特定行的最新更新。
为此,我们在分区上使用 row_number()
,如下所示,
"row_number"() OVER (
PARTITION BY "uuid"
ORDER BY "uuid" ASC,
"status"."sequence" DESC,
"modifiedon" DESC
) "row_id_ranked",
在此之后,除 'row_id_ranked = 1' 之外的任何内容都将被丢弃。但是当 retry/re-transmission 发生时, "status"."sequence"
和 "modifiedon"
将完全相同。这将创建具有 row_id_ranked=1
的多行。使其难以移除。
根据我对 documentation 的理解,row_number
应该是唯一值。但是对于这些重复的情况,显然不是。
row_number() → bigint#
Returns a unique, sequential number for each row, starting with one, according to the ordering of rows within the window partition.
在这种情况下如何删除重复数据?
假设不存在状态序列之外的第三列并在日期上修改以打破潜在的平局,并且假设您不关心保留哪条记录,您可以使用 RANDOM()
这里:
ROW_NUMBER() OVER (PARTITION BY uuid
ORDER BY "status"."sequence" DESC, modifiedon DESC, RANDOM())
AS row_id_ranked
如果您在行号的“结束”子句中使用“按 uuid 分区”,您将为每个不同的 uuid 获得第 1 行。也就是说,您已按 uuid 对数据进行分区,并且每个分区的编号将重新开始,如您发布的定义所示。
我认为您只想使用 order by,它将 return 1 行号 1.
"row_number"() OVER (
ORDER BY "uuid" ASC,
"status"."sequence" DESC,
"modifiedon" DESC
) "row_id_ranked",