函数

row_number()

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_idid 最大的行将被赋予行号 1,id 第二大的行将被赋予行号 2,以此类推。

这种用法在处理每个分区内的排名问题时非常有用,例如,你可能想要找出每个 first_version_idid 最大的行。在这种情况下,你可以使用 ROW_NUMBER() 函数生成行号,然后在外部查询中过滤出行号为 1 的行。