在 sql 服务器中过滤两个连续的行号

Filter two consecutive row numbers in sql server

我正在使用此代码查找重复项

代码:

select donrId,
    donrFirstName,
    donrLastName,
    donrBirthDate,
    ROW_NUMBER() over (
        partition by donrFirstName,
        donrBirthDate order by donrLastName
        ) as SequenceNumber
from donors ) as dd
where dd.SequenceNumber > 1
order by donrId

问题:

我无法过滤两个连续数字(例如 1 和 2)的分区结果集

期望的结果:

donrFirstName   |donrLastName  |donrBirthDate   |SequenceNumber 
---------------------------------------------------------------
king            |kong          |25/05/2017      |1
king            |kong          |25/05/2017      |2

您的查询将 return 仅记录序列号 > 1 的记录。要 return 所有以数字 1 开头的记录,您可以使用 COUNT(*) window 函数,像这样:

SELECT 
    donrId, donrFirstName, donrLastName, donrBirthDate, SequenceNumber
FROM
    (SELECT 
         donrId, donrFirstName, donrLastName, donrBirthDate, 
         ROW_NUMBER() OVER (PARTITION BY donrFirstName, donrBirthDate ORDER BY donrLastName) AS SequenceNumber 
         COUNT(*) OVER (PARTITION BY donrFirstName, donrBirthDate) AS cnt
     FROM 
         donors) AS dd 
WHERE 
    dd.cnt > 1 
ORDER BY 
    donrId