ROW_NUMBER()
是一个窗口函数,它为每一行分配一个唯一的整数,这个整数表示该行在查询结果集中的位置。这个函数在处理分页查询、排名等问题时非常有用。
在你选中的代码中:
DELETE FROM project_file
WHERE (first_version_id, id) IN (
SELECT first_version_id, id
FROM (
SELECT first_version_id, id,
ROW_NUMBER() OVER(PARTITION BY first_version_id ORDER BY id DESC) as rn
FROM project_file
WHERE newest_version = 1 and delete_flag = 0
) AS subquery
WHERE rn > 1
);
ROW_NUMBER()
函数被用于生成一个名为 rn
的新列,这个新列为每个 first_version_id
分区内的行分配一个唯一的行号。这些行号是根据 id
列的降序排列生成的。也就是说,对于每个 first_version_id
,id
最大的行将被赋予行号 1,id
第二大的行将被赋予行号 2,以此类推。
这种用法在处理每个分区内的排名问题时非常有用,例如,你可能想要找出每个 first_version_id
中 id
最大的行。在这种情况下,你可以使用 ROW_NUMBER()
函数生成行号,然后在外部查询中过滤出行号为 1 的行。