mysql 如何使用row_number()窗口函数删除重复,同时保留最新行

kr98yfug  于 2023-02-11  发布在  Mysql
关注(0)|答案(1)|浏览(151)

我想用row_number()窗口函数添加max或其他东西来保留表中最新的甚至是重复的记录。我该如何修改代码?这个函数删除了所有重复的记录。
到目前为止,我尝试了下面的陈述:

DELETE FROM employee
 WHERE employee_id IN (SELECT employee_id
                         FROM (SELECT employee_id,
                                      ROW_NUMBER() 
                                           OVER (PARTITION BY employee_id 
                                                     ORDER BY employee_id) AS row_num
                                 FROM employee) t
                        WHERE row_num > 1)
vvppvyoh

vvppvyoh1#

您的示例中的问题是,您使用employee_id IN (...)进行删除,因此它总是删除具有此编号的每个员工,您需要按行号删除。
这里是一个例子,为您的情况下,请让我知道,如果它的工作你:)

WITH cte AS (
    SELECT 
        employee.*, 
        ROW_NUMBER() OVER (
            PARTITION BY employee_id
            ORDER BY employee_id
        ) row_num
     FROM 
        employee
)
DELETE FROM cte
WHERE row_num > 1;

相关问题