删除 table 中的重复行

Delete duplicate rows in a table

我编写了一个查询来查找 table 中的重复行。它输出重复的对(例如 row: 1,2 在你遇到 row: 2,1 之后)

SELECT m1.ID, m2.ID
FROM AccessLog_Manual m1
    INNER JOIN AccessLog_Manual m2 ON 
        m1.ACCESS = m2.ACCESS AND 
        m1.EMPLOYEEID = m2.EMPLOYEEID AND
        m1.LOGDATETIME = m2.LOGDATETIME AND
        m1.MORPHOACCESSID = m2.MORPHOACCESSID AND
        m1.ID <> m2.ID
ORDER BY m1.ID

现在我想在删除语句中使用此查询,这样只删除 一行对。 (即例如 row 1,2row 2,1,仅删除 1 并让 2 不删除)

您可以使用 row_number() 为您认为重复的行分配编号。大于 1 的数字表示该行重复。

例如:

; with  numbered as
        (
        select  row_number() over (
                    partition by ACCESS, EMPOYEEID, LOGDATETIME, MORPHOACCESSID
                    order by ID) as rn
        ,       *
        from    AccessLog_Manual
        )
delete  numbered
where   rn > 1;

See it working at SQL Fiddle.